About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Apr

    28

    iOS APP 启动画面 / 闪屏 批量生成脚本

    • 1 Comments
    • Photoshop! WOW
    • 发布:古树悬叶
    • 引用:0
    • 浏览:

    这是《iOS APP 启动画面 / 闪屏 PS 尺寸图批量生成脚本》的升级版本,因为它不仅仅只是建立尺寸和命名闪屏图像的文件名,它还能自动按闪屏的尺寸建立图标(也会按闪屏的不同方向自动旋转图标),并自动保存所有图像

    安装了 ExtendScript Toolkit 的用户可以直接在网页上复制以下脚本运行(请在 CS6 以上的版本中使用,推荐使用 CC,因为我用的是 CC )。没有安装 ET 工具的也可以直接点击这里下载脚本文件,然后 “文件——脚本——浏览” 运行。

    #target photoshop
    app.bringToFront();


    //闪屏的背景色
    var bgColor = "333333";


    //APP是否为横向的
    var appIsLandscape = true;


    //所有闪屏尺寸集合
    //以下所有尺寸来 2015 年 3 月 9 日 Adobe 官方博客 
    //官方博客地址: http://blogs.adobe.com/airodynamics/2015/03/09/launch-images-on-ios-with-adobe-air/
    var docNames = [
                                //图像都使用 Default 开头


                                //5s 之前的手机设备,没有方向修饰词,屏幕都是竖的
                                //如果做横向的闪屏,可以将显示的图案旋转90度


                                //加个默认图像,万一遇上个 iPhone3GS 渣机用户,或其它意外情况(比如苹果公司将来新出一个设备)
                                ["Default.png",    "320*480"],


                                //设备名称 ~iphone 其实是可以省略的,默认就是 ~iphone。
                                //如果是ipad它会通过方向修饰词去判断的,为了严禁起见,还是加上吧。
                                ["Default~iphone.png",    "640*960"], //iPhone4 非 Retina屏
                                ["Default@2x~iphone.png",    "640*960"], //iPhone4 、4s Retina屏
                                ["Default-568h@2x~iphone.png",    "640*1136"],//iPhone 5,5c,5s


                                ["Default-375w-667h@2x~iphone.png",    "750*1334"], //iPhone6 竖向                          
                                ["Default-414w-736h@3x~iphone.png",    "1242*2208"],//iPhone6 plus 竖向


                                ["Default-Landscape-414w-736h@3x~iphone.png",    "2208*1242"],//iPhone6 plus,已经可以加横向修饰词
                                                                                                                                  //由此可见 iPhone6 Plus 是手机和平板设备的综合体


                                //iPad 平板设备有方向修饰词,因为只有平板有方向修饰词,所以可以省略设备修词
                                //比如将 Default-Landscape~ipad.png 写成 Default-Landscape.png。
                                //上面的 iPhone6 Plus 也一样,有方向修饰词,所以它也属于一种平板设备,虽然它写的是 ~iphone
                                //但所有设修饰词无论是 ~iphone 还是~ipad 都是可以省略的
                                ["Default-Portrait~ipad.png",    "768*1024"],//iPad 1 、iPad 2 等旧设备,正方向的
                                ["Default-Landscape~ipad.png",    "1024*768"],//iPad 1 、iPad 2 等旧设备,左横方向
                                ["Default-Portrait@2x~ipad.png",    "1536*2048"],//iPad 3, iPad Air 等新设备,正方向
                                ["Default-Landscape@2x~ipad.png",    "2048*1536"]//iPad 3, iPad Air 等新设备,左横方向


                                //我这里没有放设备倒转时的方向与右横方向,也就是带有 PortraitUpsideDown 与 LandscapeRight 修饰词的图片
                                //因为我用不上,因为游戏 APP方向一般都是固定的,要不是是竖的,要不就是横的。
                                //如果对倒的和右横方向有需要,请按 Adobe 官方博客网页中的名称添加
                              ];


    main();


    function main()
    {
        if(app.documents.length > 0)
        {
               //调试时使用的代码
               /*
                   while(app.documents.length)
                   {
                       app.documents[0].close (SaveOptions.DONOTSAVECHANGES);
                   } */
     
               alert("请选关闭 Photoshop 中的所有文档");
               return;
        }


        //一个启动图像,一般启动时显示的都是自己的一个 LOGO 或其它个性图案
        //方向就是普通的屏幕正方向,如果是横版游戏,也不需要先将 LOGO 旋转九十度的
        var fileInRef = File.openDialog ("请选择一个启动时用于显示的图像文件", "*.png", false);


        if(!fileInRef)
        {  
            //未选择就中止
            return;
        }


        //打开图像文件
        var inDocument = app.open(fileInRef);


        //这个启动图像在全屏时显示的相对值。
        //比如:缩小到几分之几2分之一就写2,3分之一就写3。
        var scaleN = 3;


        //选择一个输出文件夹,Adobe air 项目一般就是选项目的 src 根目录
        var outputFolder = Folder.selectDialog("然后选择一个输出文件夹");


         if(!outputFolder)
        {
            //未选择就中止
            return;
        }


        //去掉图像中多余的透明外围区域(边缘区域)
        var tempLayer = inDocument.layers[0];
        var tempBounds = tempLayer.bounds;
        inDocument.crop (tempBounds);


        //把裁切后的当前文档复制一份进行操作
        //复制一份用于操作,不改变原先导入的图像
        var tempDoc = inDocument.duplicate("tempDoc");


        //原始打开的图像不保存修改关闭
        inDocument.close (SaveOptions.DONOTSAVECHANGES);


        //PS 中文档对象集合的引用
        var docs = app.documents;


        //i从1开始,0是默认已经打开的图像文件
        for (var i =0; i < docNames.length; i++)
        {
           var size = docNames[i][1].split("*")


           var doc = docs.add(
                          UnitValue(size[0],"px"), //宽
                          UnitValue(size[1],"px"), //高
                          72, //分辨率
                          docNames[i][0], //名称
                          NewDocumentMode.RGB, //颜色模式
                          DocumentFill.BACKGROUNDCOLOR, //使用背景色初始化文档,可以直接使用透明值 DocumentFill.TRANSPARENT
                          1//像素的宽高比
                          );


             //处理图像         
             setLaunchImage(scaleN, tempDoc, doc, outputFolder);
        }
    }


    function setLaunchImage(scaleN, inPic, doc, outputFolder)
    {
         //激活原始图像文件
         app.activeDocument = inPic;


        //历史记录还原
        var historyStates = inPic.historyStates;
        inPic.activeHistoryState = historyStates[0];


         var layerW = inPic.width;
         var layerH = inPic.height;


        //激活一个闪屏文档
         app.activeDocument = doc;


         var rotated = false;//文档是否已经被旋转过


         if(appIsLandscape)
         {
             if(doc.name.indexOf ("Landscape") < 0)
             {
                 doc.rotateCanvas (-90);
                 rotated = true;
             }
         }else
         {
              if(doc.name.indexOf ("Landscape") > -1)
             {
                 doc.rotateCanvas (-90);
                 rotated = true;
             }
         }


         //读闪屏的宽与高
         var w = doc.width;
         var h = doc.height;


         //填充闪屏的背景颜色
         var layers = doc.layers;
         var bgLayer = layers[0];


         doc.activeLayer = bgLayer;


        var selection = doc.selection;
        selection.selectAll ();


        var fillColor = new SolidColor;
        fillColor.rgb.hexValue = bgColor;


        selection.fill(fillColor);


        //确定启动图像缩放后的宽与高值(相对于闪屏界面的大小)
        var tempW = UnitValue(w / scaleN);
        var tempH = UnitValue((tempW / layerW) * layerH);


        if(tempH > h / scaleN)
        {
            tempH = UnitValue(h / scaleN);
            tempW = UnitValue((tempH / layerH) * layerW);
        }


        //激活原图像
        app.activeDocument = inPic;


        //调整原图像的大小
        inPic.resizeImage(tempW,tempH);


         //图像无论是放大还是缩小,都会变模糊,只是放大时模糊的快一些,缩小时模糊的慢一些
         //所以这里复制一个图像进行锐化,可以让缩小后的图像清晰一点。
         var duplicateLayer = inPic.activeLayer.duplicate();


         inPic.activeLayer = duplicateLayer;


         duplicateLayer.applySharpen();//应用锐化
         duplicateLayer.opacity = 40;


         inPic.mergeVisibleLayers();//合并图层


        //全选复制原图像
        var selection = inPic.selection;
        selection.selectAll();
        selection.copy();


        //激活被处理的闪屏文档
        app.activeDocument = doc;


        //全选并粘贴进去
        var selection = doc.selection;
        selection.selectAll ();
        doc.paste();


        if(rotated)
        {
              doc.rotateCanvas (90);
        }
        //保存闪屏
        saveLaunchImage(doc, outputFolder)
    }


    function saveLaunchImage(doc, outputFolder)
    {
         //保存的文件
         var saveFile = new File(outputFolder + "/" + doc.name)


          //如果文件已经存在就先删除它
          if (saveFile.exists)
          {
                saveFile.remove();
          }


         //以PNG格式保存
         var pngSaveOptions = new ExportOptionsSaveForWeb();
         pngSaveOptions.format = SaveDocumentType.PNG;
         pngSaveOptions.transparency = true;
         pngSaveOptions.includeProfile = false ;
         pngSaveOptions.interlaced = false ;
         pngSaveOptions.PNG8= false ;


         activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, pngSaveOptions);
    }

    脚本文件:iOSAPP所有启动画面制作.zip

    • Tags: ps  jsx  
    • 2015 / 4 / 28
    Post Comment.
    quote 1.古树悬叶
    2015/5/2 13:37:39
    用这个脚本生成之后,是会在APP Stroe( iTunes )中显示“此 App 已针对 iPhone 5、iPhone 6 和 iPhone 6 Plus 优化。”字样的,英文版显示“This app is optimized for iPhone 5, iPhone 6, and iPhone 6 Plus.”

    发表评论