能够写这样一个脚本,它能作到:php
Release
和 Debug
,只在 Debug
环境下 Build 项目时执行脚本作后端的同窗们,大多知道 ImageMagick。html
使用 ImageMagick 能够建立、编辑、合成或转换图片。它能够读和写各类格式的图像(超过 200 种格式)包括 PNG、JPEG、JPEG - 2000、GIF、TIFF、DPX、EXR、WebP、Postscript、PDF、SVG。ImageMagick 能够调整、翻转、镜像、旋转、扭曲、剪切和转换图像、图像色彩调整,适用于各类特殊效果,或绘制文本、线、多边形、椭圆和贝塞尔曲线。linux
经过 shell command 就能够轻易使用以上功能。git
让咱们来看一些基本的。这是咱们准备好的 120*120
的原图:github
cd
到图片所在的目录,执行如下命令,给图片添加高斯模糊效果:算法
convert original.png -blur 10x8 blurred.png
复制代码
完成图:shell
继续,执行如下命令从 坐标 (0,60)
剪切成 120*60
的图片,编程
convert blurred.png -crop 120x60+0+60 cropped-blurred.png
复制代码
完成图:后端
继续,给图片添加文字水印『zhoulingyu』,参数包括:背景不填充颜色、白色字体、字体大小 十二、居中显示文字、文字为『zhoulingyu』:xcode
convert -background none -fill white -pointsize 12 -gravity center caption:"zhoulingyu" cropped-blurred.png +swap -composite label.png
复制代码
完成图:
继续,将上面获得的剪切好的带水印的 label.png
和 原图 original.png
合成在一块儿:
composite label.png original.png finished-image.png
复制代码
完成图:
OK,咱们获得了想要的效果图。
给出一些 ImageMagic 的经常使用用法:
identify original.png
original.png PNG 120x120 120x120+0+0 8-bit sRGB 46c 2.58KB 0.010u 0:00.000
复制代码
convert original.png original.jpg
复制代码
convert original.png -resize 200x200 resize-image.png
复制代码
# 从坐标 (0,0) 裁剪 100*100 的图像
convert original.png -crop 100x100+0+0 crop.png
复制代码
convert original.png -rotate 45 rotate.png
复制代码
# 给图片添加水印
convert original.png -compose over watermark.png -composite new-image.png
复制代码
convert -blur 80x5 original.jpg blur.png
复制代码
-blur radiusxsigma,两个分别是高斯模糊须要的两个参数,具体能够查看 blur 参数使用
ImageMagick 能够实现 N 多效果,像油画、噪声、散射、旋涡,都不在话下。
除了基本的效果,还有一些比较经常使用的参数:
参数名 | 使用规范 | 说明 | 用例 |
---|---|---|---|
-background | -background color | 设置背景色 | -background white |
-pointsize | -pointsize value | 设置字体等大小 | -pointsize 12 |
-gravity | -gravity type | 为其余命令附加 gravity,好比设置文字添加位置居中。 | -gravity Center |
-geometry | -geometry geometry | 设置即将处理图像的坐标位置 | -geometry +0+60 -geometry Center |
固然这些均可以在 官方文档 找到。
知道 ImageMagic 如何使用,剩下来写脚本就思路清晰多了。
在工程 Target
-> Build Phases
中新建一个 Run Script,咱们能够给它起名 generate auxiliary icon
,这样稍后容易在 Report Navigator
观察。
如今咱们能够开始编写咱们的脚本 auxiliary_icon.sh
写伪代码一般可以帮助我本身更清晰的写代码:
// 1. 判断执行 Build 的机器是否安装了 ImageMagic
// |- 若是没有安装:提示安装,退出脚本
// |- 若是安装:继续执行
// 2. 获取 commit 号 hash 值、分支名、build 号,并将其拼接成一个字符串
// 3. 判断编译环境
// |- 若是是 Release 环境:提示当前是 Release 环境,退出脚本
// |- 若是是非 Release 环境:继续执行
// 4. 获取 Plist 中 CFBundleIconFiles 的数量
// 5. 根据数量循环,执行调用『生成记号图方法』
// 『生成记号图方法』
// function generateIcon() {
// 1. 模糊图片
// 2. 截取图片下半部分
// 3. 添加 commit+brach+build 组成的字符串在截取图片上
// 4. 合成截取图片和原图
// 5. 清除多余图片
// }
复制代码
伪代码写好了,开始编写正式代码:
which 一下就知道
convertPath=`which convert`
# 判断 convertPath 文件是否存在
if [ ! -f ${convertPath}]; then
echo "============== WARNING: 你须要先安装 ImageMagick!!!!: brew install imagemagick =============="
exit 0;
fi
复制代码
PlistBuddy 能够用于读取 Plist 文件,经过描述路径就能够找到你想知道的 Key 对应的 Value。 ${INFOPLIST_FILE}
是 xcodebuild 提供的变量(具体能够参考 Build settings reference)提供了编译后 info.plist
的路径。
commit=`git rev-parse --short HEAD`
branch=`git rev-parse --abbrev-ref HEAD`
buildNumber=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}"`
caption="${buildNumber} \n${branch}\n${commit}"
复制代码
# Release 不执行
echo "Configuration: $CONFIGURATION"
if [ ${CONFIGURATION} = "Release" ]; then
exit 0;
fi
复制代码
在编译后的 info.plist
中,能够找到以下结构:
这里记录了全部的 Icon files。查看 plist 的原格式,能够看到原始的 key 是什么。经过 PlistBuddy 和 路径 CFBundleIcons:CFBundlePrimaryIcon:CFBundleIconFiles
能够输出 value。
| wc -l
能够统计输出行数。
icon_count=`/usr/libexec/PlistBuddy -c "Print CFBundleIcons:CFBundlePrimaryIcon:CFBundleIconFiles" "${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}" | wc -l`
复制代码
要注意的是, /usr/libexec/PlistBuddy -c "Print CFBundleIcons:CFBundlePrimaryIcon:CFBundleIconFiles" "${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}"
输出结果是这样的:
输出一共是 五行,因此得到的结果是 5。
那么真实的 CFBundleIconFiles count 实际上是:
real_icon_index=$((${icon_count} - 2))
复制代码
刚开始,我也没有注意。可想而知心情如何 =_=。
for ((i=0; i<$real_icon_index; i++)); do
# 找到 icon 名
icon=`/usr/libexec/PlistBuddy -c "Print CFBundleIcons:CFBundlePrimaryIcon:CFBundleIconFiles:$i" "${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}"`
# 调用 generateIcon 方法,传入 icon 名
generateIcon "${icon}@2x.png"
done
复制代码
function generateIcon() {
originalImg=$1
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
# 验证存在性
if [[ ! -f ${originalImg} || -z ${originalImg} ]]; then
return;
fi
# 进入编译后的工程目录
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
# 添加高斯模糊
convert ${originalImg} -blur 10x8 blur-original.png
# 截取下部分
width=`identify -format %w ${originalImg}`
height=`identify -format %h ${originalImg}`
height_0=`expr ${height} / 2`
height_1=$((${height} - ${height_0}))
convert blur-original.png -crop ${width}x${height_0}+0+${height_1} crop-blur-original.png
# 加字
point_size=$(((8 * $height) / 58))
convert -background none -fill white -pointsize ${point_size} -gravity center caption:"${caption}" crop-blur-original.png +swap -composite label.png
# 合成
composite -geometry +0+${height_0} label.png ${originalImg} ${originalImg}
# 清除文件
rm blur-original.png
rm crop-blur-original.png
rm label.png
}
复制代码
最终的代码清单放在了 Github 上:
Command-line Tools:Convert 使用ImageMagick添加图片水印-Linux krzysztofzablocki/IconOverlaying Overlaying application version on top of your icon 个人ImageMagick使用心得 高斯模糊的算法 Build settings reference Shell脚本编程30分钟入门
有什么问题均可以在博文后面留言,或者微博上私信我,或者邮件我 coderfish@163.com。
博主是 iOS 妹子一枚。
但愿你们一块儿进步。
个人微博:小鱼周凌宇