Dieser Artikel stellt hauptsächlich die relevanten Informationen zur Zusammenfassung und Lösungen für die Probleme vor, die beim Generieren von JPEG-Bildern aus BufferedImage mit ImageIO.writer in Java auftreten. Freunde in Not können sich auf
Java mit ImageIO beziehen .writer zum Generieren von JPEG-Bildern aus BufferedImage. Zusammenfassung und Lösungen für Probleme, die beim Generieren von JPEG-Bildern auftreten
Das Generieren von JPEG-Bildern ist eine sehr, sehr einfache Sache. Viele Einführungen im Internet verwenden direkt com.sun.image.codec.jpeg. JPEGImageEncoder ist wie folgt implementiert:
/** * 将原图压缩生成jpeg格式的数据 * @param source * @return */ public static byte[] wirteJPEGBytes(BufferedImage source){ if(null==source) throw new NullPointerException(); ByteArrayOutputStream output = new ByteArrayOutputStream(); JPEGImageEncoder jencoder = JPEGCodec.createJPEGEncoder(output); JPEGEncodeParam param = jencoder.getDefaultJPEGEncodeParam(source); param.setQuality(0.75f, true); jencoder.setJPEGEncodeParam(param); try { jencoder.encode(source); } catch (ImageFormatException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } return output.toByteArray(); }JPEGImageEncoder ist nur die JPEG-Kodierungsimplementierung von Sun. Es wird nur in Sun unterstützt jvm, aber nicht auf anderen jvm.
/** * 将原图压缩生成jpeg格式的数据 * @param source * @return * @see #wirteBytes(BufferedImage, String) */ public static byte[] wirteJPEGBytes(BufferedImage source){ return wirteBytes(source,"JPEG"); } /** * 将原图压缩生成jpeg格式的数据 * @param source * @return * @see #wirteBytes(BufferedImage, String) */ public static byte[] wirteJPEGBytes(BufferedImage source){ return wirteBytes(source,"JPEG"); } /** * 将{@link BufferedImage}生成formatName指定格式的图像数据 * @param source * @param formatName 图像格式名,图像格式名错误则抛出异常 * @return */ public static byte[] wirteBytes(BufferedImage source,String formatName){ Assert.notNull(source, "source"); Assert.notEmpty(formatName, "formatName"); ByteArrayOutputStream output = new ByteArrayOutputStream(); try { if(!ImageIO.write(source, formatName.toLowerCase(), output)) // 返回false则抛出异常 throw new IllegalArgumentException(String.format("not found writer for '%s'",formatName)); } catch (IOException e) { throw new RuntimeException(e); } return output.toByteArray(); }Es ist kein Problem, Zehntausende Bilder zu verarbeiten Bei einem PNG-Bild hat ImageIO.write tatsächlich „false“ zurückgegeben und eine Ausnahme ausgelöst.
/** * 将{@link BufferedImage}生成formatName指定格式的图像数据 * @param source * @param formatName 图像格式名,图像格式名错误则抛出异常 * @return */ public static byte[] wirteBytes(BufferedImage source,String formatName){ Assert.notNull(source, "source"); Assert.notEmpty(formatName, "formatName"); ByteArrayOutputStream output = new ByteArrayOutputStream(); BufferedImage newBufferedImage = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g = newBufferedImage.createGraphics(); try { g.drawImage(source, 0, 0,null); if(!ImageIO.write(newBufferedImage, formatName, output)) throw new IllegalArgumentException(String.format("not found writer for '%s'",formatName)); } catch (IOException e) { throw new RuntimeException(e); }finally{ g.dispose(); } return output.toByteArray(); }Die Grundidee besteht darin, ein BufferedImage derselben Größe neu zu erstellen, und verwenden Sie dann die Graphics.drawImage-Methode, um das Originalbild in ein neues BufferedImage
-Objekt zu schreiben. Durch diese Konvertierung werden die Unterschiede zwischen BufferedImage-Objekten, die durch verschiedene Arten von Bildformaten generiert werden, geglättet und anschließend ImageIO. write aufgerufen wird, um das neue ImageIO.write-Objekt Bildverarbeitung auszuführen, stellt kein Problem dar.
Verbesserung
In meinem Projekt werden die Bilddaten aus derDas obige ist der detaillierte Inhalt vonAusführliche Erklärung von Java mit ImageIO.writer zum Generieren von JPEG-Bildern aus BufferedImage, Zusammenfassung und Lösungen für aufgetretene Probleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!