自动调整"非视网膜"图像版本的大小

gd1*_*gd1 18 xcode

我正在寻找一种解决方案,可以让我免于维护同一图像的两个版本,一个用于Retina显示器(又名@ 2x),另一个用于非Retina显示器.我的目标是仅维护"2x"图像,并且只需单击一下即可调整所有这些图像的"神奇工具",甚至可以在XCode中构建.就像"设置并忘记它".

你能帮助我吗?提前致谢.

nsc*_*hum 28

如果您只想缩小它们,可以让Xcode在构建过程中自动生成所有非视网膜图像.此示例脚本使用"sips",因为它预装在Mac上.

剧本

#!/bin/bash
# Downsamples all retina ...@2x.png images.

echo "Downsampling retina images..."

dir=$(pwd)
find "$dir" -name "*@2x.png" | while read image; do

    outfile=$(dirname "$image")/$(basename "$image" @2x.png).png

    if [ "$image" -nt "$outfile" ]; then
        basename "$outfile"

        width=$(sips -g "pixelWidth" "$image" | awk 'FNR>1 {print $2}')
        height=$(sips -g "pixelHeight" "$image" | awk 'FNR>1 {print $2}')
        sips -z $(($height / 2)) $(($width / 2)) "$image" --out "$outfile"

        test "$outfile" -nt "$image" || exit 1
    fi
done
Run Code Online (Sandbox Code Playgroud)

自动执行

  • 创建一个新的"聚合目标",将其命名为"Downsample images".
  • 向运行该脚本的目标添加"运行脚本"阶段.
  • 在应用程序目标中添加"Downsample images"目标作为"Target Dependency".

笔记

请记住仍然将1x图像添加到Xcode项目中.根据您的需要,您可能还需要:

  • 从转换中排除某些文件
  • 将生成的文件添加到.gitignore文件中
  • 使用ImageMagick的" 转换 "而不是"啜饮".(对于一些索引的PNG,啜饮似乎失败了.)
  • 运行optipng

如果要检查缩减采样版本,ImageMagick会附带" 比较 "命令.


F.X*_*.X. 8

这是一个很老的线程,但我偶然发现它,所以我可以详细说明自动维护多个大小.

性能方面,我不确定使用自动缩减是一个明智的想法,因为它必须实时完成,但它应该适用于更简单的情况.

现在,要@2x自动转换这些图像,一个简单的bash脚本应该可以解决这个问题.l4u的解决方案可行,但对于需要更简单且不想安装的人来说guard,这也有效(你仍然需要安装ImageMagick):

for f in $(find . -name '*@2x.png'); do
    echo "Converting $f..."
    convert "$f" -resize '50%' "$(dirname $f)/$(basename -s '@2x.png' $f).png"
done
Run Code Online (Sandbox Code Playgroud)