Java調整圖片大小合併PNG圖片生成ICON(保持背景透明)

1.重新調整圖片到合適尺寸(有壓縮圖片功能)

/**
 * 
 * 功能描述: <br>
 * 〈調整圖像到固定大小〉
 *
 * @param srcImageFile  源圖像文件地址
 * @param descImageFile 縮放後的圖像地址
 * @param width         縮放後的寬度
 * @param height        縮放後的高度
 * @param isPadding     是否補白
 * 
 */
public final static void changeSize(String srcImageFile, String descImageFile, int width, int height, boolean isPadding) {
    try {
        // 縮放比例
        double ratio = 0.0;
        File file = new File(srcImageFile);
        BufferedImage bufferedImage = ImageIO.read(file);
        Image image = bufferedImage.getScaledInstance(width, height, bufferedImage.SCALE_SMOOTH);
        // 計算縮放比例
        if (bufferedImage.getHeight() > bufferedImage.getWidth()) {
            ratio = (new Integer(height)).doubleValue() / bufferedImage.getHeight();
        } else {
            ratio = (new Integer(width)).doubleValue() / bufferedImage.getWidth();
        }
        AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
        image = op.filter(bufferedImage, null);

        // 是否需要補白
        if (isPadding) {
            BufferedImage tempBufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics2d = tempBufferedImage.createGraphics();
            graphics2d.setColor(Color.white);
            graphics2d.fillRect(0, 0, width, height);
            if (width == image.getWidth(null)) {
                graphics2d.drawImage(image, 0, (height - image.getHeight(null)) / 2, image.getWidth(null), image.getHeight(null), Color.white, null);
            } else {
                graphics2d.drawImage(image, (width - image.getWidth(null)) / 2, 0, image.getWidth(null), image.getHeight(null), Color.white, null);
            }
            graphics2d.dispose();
            image = tempBufferedImage;
        }
        ImageIO.write((BufferedImage) image, "png", new File(descImageFile));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.合併兩張PNG圖片

/**
 * 
 * 功能描述: <br>
 * 〈利用畫布生成新的圖片〉
 *
 * @param backImage 背景圖文件地址
 * @param srcImage  前景圖文件地址
 * @param descImage 生成圖文件地址
 * @return
 * 
 */
public static void mergeImage(String backImage, String srcImage, String descImage) {
    try {
        int offset = 0;
        BufferedImage backBufferedImage = ImageIO.read(new File(backImage));
        BufferedImage srcBufferedImage = ImageIO.read(new File(srcImage));
        // 輸出圖片寬度
        int width = backBufferedImage.getWidth() + offset;
        // 輸出圖片高度
        int height = backBufferedImage.getWidth() + offset;
        BufferedImage descBufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
        Graphics2D graphics2d = (Graphics2D) descBufferedImage.getGraphics();
        graphics2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        // 往畫布上添加圖片,並設置邊距
        graphics2d.drawImage(backBufferedImage, null, 0, 0);
        graphics2d.drawImage(srcBufferedImage, null, 175, 175);
        graphics2d.dispose();
        // 輸出新圖片
        ImageIO.write(descBufferedImage, "png", new File(descImage));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3.測試代碼

public static void main(String[] args) throws IOException {
    // 重新調整b.png尺寸 生成d.png
    changeSize("d:\\b.png", "d:\\d.png", 640, 640, false);
    // 合併a.png+d.png->c.png
    mergeImage("d:\\a.png", "d:\\d.png", "d:\\c.png");
}

4.測試結果

a.png+b.png=c.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章