一鍵生成IOS App Icon工具 (目前需要更新,因為alpha通道問題 現在的蘋果后台已經不接受本工具導出的icon了 等待更新)


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

可運行jar包上傳在 這里 ,   需要 JRT 環境。

Apple 后台改了 需要移除alpha通道  這個工具已經不能滿足要求  大家不要再下這個了 我重新弄了個 nodejs的。用nodejs 比 java 搞起來簡直爽多了啊 

或者  大家可以上傳到 這里 來制作 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

感謝分享.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM