1. 程式人生 > >一鍵生成IOS App Icon工具

一鍵生成IOS App Icon工具

div sca sdn 全部 修改 mage top pri exce

每次要提審AppStore,美術總是給一個1024x1024的 Icon ,然後就進入了繁瑣的修改圖片 size 和 plist 文件 Icon 配置的過程,很繁瑣。這些應該是可以偷懶的啊~然後就有了這篇。

需求:

  提供一張Icon 1024x1024 png 不帶alpha通道,和Assets文件夾內的AppIcon.appiconset內的Content.json文件,

輸出:

  Content.json 中指定的所有Icon。 (包括命名之類的全部搞定,問題雖然小,但是省了很多事)。

技術分享圖片

生成結果如圖 :

技術分享圖片

(1)首先嘗試用Grahics2D來draw,

public static void
PngResize(String srcImageFile, String result, int width,int height) { try { BufferedImage src = ImageIO.read(new File(srcImageFile)); Image image = src.getScaledInstance(width,height,Image.SCALE_DEFAULT); BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics g
= newImage.createGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); newImage.flush(); ImageIO.write(newImage, "PNG", new File(result)); } catch (IOException e) { e.printStackTrace(); } }

發現draw出來的圖片毛邊情況很嚴重,所以放棄.

(2) 後面發現 Thumbnailator 這個Java 類庫的處理效果要好很多啊 所以果斷用這個

public static int PngResize(String srcImageFile, String result, float width_, float height_){
    try {
        Thumbnails.of(srcImageFile).size((int)width_, (int)height_).outputQuality(1f).keepAspectRatio(false).toFile(result); 
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

出來效果對比 很好。記錄下

Thumbnailator 類庫還有如下操作:

//按指定大小把圖片進行縮和放(會遵循原圖高寬比例)  此處把圖片壓成400×500的縮略圖  變為400*300,遵循原圖比例縮或放到400*某個高度
Thumbnails.of(fromPic).size(400,500).toFile(toPic);////按照比例進行縮小和放大
Thumbnails.of(fromPic).scale(0.2f).toFile(toPic);//按比例縮小
Thumbnails.of(fromPic).scale(2f);//按比例放大

//不按比例,就按指定的大小進行縮放
Thumbnails.of(fromPic).size(100, 100).keepAspectRatio(false).toFile(toPic);
//或者Thumbnails.of(fromPic).forceSize(100,100).toFile(toPic);
//旋轉圖片,rotate(角度),正數則為順時針,負數則為逆時針
Thumbnails.of(fromPic).size(200,200).rotate(90).toFile(toPic);

//圖片尺寸不變,壓縮圖片文件大小outputQuality實現,參數1為最高質量
Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);

//給圖片加水印,watermark(位置,水印圖,透明度)Positions.CENTER表示加在中間
Thumbnails.of(fromPic).size(400,400).watermark(Positions.CENTER,ImageIO.read(waterPic),0.5f).outputQuality(0.8f).toFile(toPic);

//用sourceRegion()實現圖片裁剪//圖片中心300*300的區域,Positions.CENTER表示中心,還有許多其他位置可選
Thumbnails.of(fromPic).sourceRegion(Positions.CENTER,300,300).size(300,300).toFile(toPic);

//圖片中上區域300*300的區域
Thumbnails.of(fromPic).sourceRegion(Positions.TOP_CENTER,300,300).size(300,300).toFile(toPic);

//用outputFormat(圖像格式)轉換圖片格式,保持原尺寸不變
Thumbnails.of(fromPic).scale(1f).outputFormat("png").toFile("picture/png格式的圖片.png");

//輸出成文件流OutputStream
OutputStream os=new FileOutputStream(toPic);
Thumbnails.of(fromPic).size(120,120).toOutputStream(os);

//輸出BufferedImage,asBufferedImage()返回BufferedImage
BufferedImage bi=Thumbnails.of(fromPic).size(120,120).asBufferedImage();
ImageIO.write(bi,"jpg",toPic);

//壓縮至指定圖片尺寸(例如:橫400高300),保持圖片不變形,多余部分裁剪掉
BufferedImage image = ImageIO.read(fromPic);
Builder<BufferedImage> builder = null;

int imageWidth = image.getWidth();
int imageHeitht = image.getHeight();
if ((float)300 / 400 != (float)imageWidth / imageHeitht) {
    if (imageWidth > imageHeitht) {
        image = Thumbnails.of(fromPic).height(300).asBufferedImage();
    } else {
        image = Thumbnails.of(fromPic).width(400).asBufferedImage();
    }
    builder = Thumbnails.of(image).sourceRegion(Positions.CENTER, 400, 300).size(400, 300);
} else {
    builder = Thumbnails.of(image).size(400, 300);
}
builder.outputFormat("jpg").toFile(toPic);

有關 Thumbnailator 類庫的操作,來自於 https://blog.csdn.net/chenleixing/article/details/44685817

感謝分享.

一鍵生成IOS App Icon工具