Javaでイメージのサイズを変更するには?
私はJavaの画像処理の専門家ではありませんが、ユーザー画像のアップロードフォームにこのサイズ変更された機能を実装するチャンスを与えました。これは、大きな画像を一定の幅と高さで小さなサイズに再サイズすることを要求します。
Graphics2Dは、次のようにイメージのサイズ変更機能を提供しています。
BufferedImage resizedImage = new BufferedImage(IMG__WIDTH, IMG__HEIGHT, type); Graphics2D g = resizedImage.createGraphics(); g.drawImage(originalImage, 0, 0, IMG__WIDTH, IMG__HEIGHT, null); g.dispose();
いくつかの記事によれば、サイズ変更されたイメージの品質を上げたい場合は、次のようにRenderingHintsを追加できます。
BufferedImage resizedImage = new BufferedImage(IMG__WIDTH, IMG__HEIGHT, type); Graphics2D g = resizedImage.createGraphics(); g.drawImage(originalImage, 0, 0, IMG__WIDTH, IMG__HEIGHT, null); g.dispose(); g.setComposite(AlphaComposite.Src); g.setRenderingHint(RenderingHints.KEY__INTERPOLATION,RenderingHints.VALUE__INTERPOLATION__BILINEAR); g.setRenderingHint(RenderingHints.KEY__RENDERING,RenderingHints.VALUE__RENDER__QUALITY); g.setRenderingHint(RenderingHints.KEY__ANTIALIASING,RenderingHints.VALUE__ANTIALIAS__ON);
1.例
ここにウェブサイトのスナップショットがあります。次のプログラムは、この画像を一定の幅と高さの画像(100 x 100)にリサイズします。
mkyong.jpg(640 x 310) – 46KB
2.ソースコード
ImageTest.java
import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** ** @author mkyong ** ** /public class ImageTest { private static final int IMG__WIDTH = 100; private static final int IMG__HEIGHT = 100; public static void main(String[]args){ try{ BufferedImage originalImage = ImageIO.read(new File("c:\\image\\mkyong.jpg")); int type = originalImage.getType() == 0? BufferedImage.TYPE__INT__ARGB : originalImage.getType(); BufferedImage resizeImageJpg = resizeImage(originalImage, type); ImageIO.write(resizeImageJpg, "jpg", new File("c:\\image\\mkyong__jpg.jpg")); BufferedImage resizeImagePng = resizeImage(originalImage, type); ImageIO.write(resizeImagePng, "png", new File("c:\\image\\mkyong__png.jpg")); BufferedImage resizeImageHintJpg = resizeImageWithHint(originalImage, type); ImageIO.write(resizeImageHintJpg, "jpg", new File("c:\\image\\mkyong__hint__jpg.jpg")); BufferedImage resizeImageHintPng = resizeImageWithHint(originalImage, type); ImageIO.write(resizeImageHintPng, "png", new File("c:\\image\\mkyong__hint__png.jpg")); }catch(IOException e){ System.out.println(e.getMessage()); } } private static BufferedImage resizeImage(BufferedImage originalImage, int type){ BufferedImage resizedImage = new BufferedImage(IMG__WIDTH, IMG__HEIGHT, type); Graphics2D g = resizedImage.createGraphics(); g.drawImage(originalImage, 0, 0, IMG__WIDTH, IMG__HEIGHT, null); g.dispose(); return resizedImage; } private static BufferedImage resizeImageWithHint(BufferedImage originalImage, int type){ BufferedImage resizedImage = new BufferedImage(IMG__WIDTH, IMG__HEIGHT, type); Graphics2D g = resizedImage.createGraphics(); g.drawImage(originalImage, 0, 0, IMG__WIDTH, IMG__HEIGHT, null); g.dispose(); g.setComposite(AlphaComposite.Src); g.setRenderingHint(RenderingHints.KEY__INTERPOLATION, RenderingHints.VALUE__INTERPOLATION__BILINEAR); g.setRenderingHint(RenderingHints.KEY__RENDERING, RenderingHints.VALUE__RENDER__QUALITY); g.setRenderingHint(RenderingHints.KEY__ANTIALIASING, RenderingHints.VALUE__ANTIALIAS__ON); return resizedImage; } }
結果を見る:
| =========================================== ====================== | JPG(4KB)| PNG(9KB)| JPGヒント(4KB)| PNGヒント(9KB)
|画像://wp-content/uploads/2009/09/mkyong
jpg.jpg[mkyong
jpg、タイトル= “mkyong
jpg”、幅= 100、高さ= 100]|画像://WP-コンテンツ/アップロード/2009/09/mkyong
png.jpg[mkyong
png、タイトル= “mkyong
png”、幅= 100、高さ= 100]|画像://wp-content/uploads/2009/09/mkyong
hint
jpg.jpg[mkyong
hint
jpg、タイトル= “mkyong
hint
jpg”、幅= 100 、高さ= 100]|画像://wp-content/uploads/2009/09/mkyong
hint
png.jpg[mkyong
hint
png、タイトル= “mkyong
hint
png”、幅= 100、高さ= 100]| ========= ========================================== ============
結論
サイズ変更されたイメージを見ると、サイズ変更されたPNGイメージのファイルサイズは、サイズ変更されたJPEGイメージよりも大きくなりますが、サイズ変更後のJPGよりもPNGの品質が優れています。ヒントはJPG形式では効果がありませんが、PNGとPNG +ヒントの間に違いは見られませんでした。レンダリングのヒントを追加しても画質が向上します。
P.Sあなたがいくつか知っていれば、Javaの画像のヒントを共有してください:)
参考文献
リンク://タグ/画像/[画像]リンク://タグ/java/[java]
イメージのサイズ変更