Справочник по C#

    Исходники по языку программирования CSharp

    moyadcode15

    Как изменить размер изображения в Java?

    /
    /
    /
    48 Views
    moyadcode8
    moyadcode14

    Я не эксперт в обработке изображений 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 следующим образом:

    moyadcode14
    
    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) – 46 КБ

    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 (4 КБ) PNG (9 КБ) JPG + Советы (4 КБ) PNG + подсказки (9 КБ)

    Заключение

    Как видно из изображения с измененным размером, размер файла изображения PNG с измененным размером больше, чем изображения JPEG с измененным размером, но качество PNG лучше, чем у JPG после изменения размера. Подсказки не будут иметь никакого эффекта в формате JPG, однако я не видел никакой разницы между подсказками PNG и PNG +, даже кто-то сказал, что добавление подсказок рендеринга повысит качество изображения?

    PS Пожалуйста, поделитесь советами по изображению Java, если вы знаете некоторые 🙂

    Рекомендации

    1. http://java.sun.com/j2se/1.4.2/docs/api/javax/imageio/ImageIO.html
    2. http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html
    3. http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Graphics2D.html
    4. http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html
    5. http://www.servletsuite.com/servlets/imagescale.htm
    6. http://www.componenthouse.com/article-20

    изображение Ява изменить размер изображения

    Как изменить размер изображения в Java?

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9