04. juni 2008 - 11:56Der er
5 kommentarer og 1 løsning
Resize og vis billede fra BLOB i database
Kan nogen hjaelpe mig med at lave en servlet som kan vise et billede, der kommer fra binaer streng i databasen -og resize billedet inden det vises.
Metoden skal i pseudo-kode goere dette:
doGet() { String id = request.getParameter("id"); byte[] image = getBlobFromDB(id); //lav denne blob til et billede //lav en resized kopi af det billede //set header("image/jpeg") //udskriv resized billede; }
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg har nu faaet lavet servletten, som bare viser billedet.
Er der nogen, der kan hjaelpe med resize delen?
Her er den fungerende servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String refindkey = request.getParameter("id");
Blob b = DatabaseFunc.getBlob(refindkey); try { InputStream in = b.getBinaryStream(); response.setContentType("image/jpeg"); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); byte[] by = new byte[32768]; int index = in.read( by, 0, 32768 ); while (index != -1) { out.write(by, 0, index); index = in.read(by, 0, 32768); } out.flush(); } catch (SQLException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } }
Jeg har kigget masser af eksempler igennem nu, men der er ikke nogen, der viser det jeg oensker. Hent blob -> lav mindre version -> vis mindre version.
Jeg har proevet i timevis at experimentere med diverse kode stumper fra her og der, men jeg kan ikke faa det til at virke.
Her er mit seneste eksperiment:
public class ShowImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String refindkey = request.getParameter("id");
Blob b = DatabaseFunc.getBlob(refindkey); if (b != null) { try { InputStream in = b.getBinaryStream();
long len = b.length(); byte[] data = b.getBytes(1, (int) len);
Image sourceimage = new ImageIcon(data).getImage(); int sourcewidth = sourceimage.getWidth(null); int sourceheight = sourceimage.getHeight(null);
int targetwidth = 125; int targetheight = sourceheight * (targetwidth / sourcewidth);
BufferedImage resizedimage = this.scaleImage(sourceimage,targetwidth,targetheight); ByteArrayOutputStream out = new ByteArrayOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(resizedimage); byte[] by = out.toByteArray();
response.setContentType("image/jpeg"); BufferedOutputStream out2 = new BufferedOutputStream(response.getOutputStream()); int n = 0; while (n < by.length) { out2.write(by[n]); } out.flush(); } catch (SQLException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } }
private BufferedImage scaleImage(Image sourceImage, int width, int height) { ImageFilter filter = new ReplicateScaleFilter(width, height); ImageProducer producer = new FilteredImageSource (sourceImage.getSource(), filter); Image resizedImage = Toolkit.getDefaultToolkit().createImage(producer);
Nu fik jeg soerme den der sidstnaevnte til at virke... :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.