本文最后更新于 1848 天前,其中的信息可能已经有所发展或是发生改变。起因
今天下了本漫画,准备放到kindle上面,按这个教程生成了几个mobi文件后,发现图片似乎有点小。
仔细一看,每一页的空白区域都很大:
于是乎找了一下,发现各种工具只能切割指定区域的白边,但是这个漫画每张图的区域都不一样。。
发现方法
逛了一大圈,最后发现magick(官网)有去除白边的功能,参考convert命令的-trim参数和–fuzz参数,在尝试了几次后,发现可以用这个命令:
magick convert raw.jpg \
-define trim:edges=north,east,south,west \
-background white \
-fuzz 85% \
-trim \
o.jpg
raw.jpg就是原始图片,o.jpg就是生成图片,85%这个参数看具体了,太大会导致图片被切割成一个像素点。这个命令效果相当不错
另外经过测试,貌似windows下,magick不支持中文路径和文件名,所以文件名和文件夹名如果有中文,需要改掉
批量处理!
这里偷了个懒,直接用了msys2(官网)自带的bash。(早知道学学powershell了)
新建一个脚本文件,比如run.sh,内容如下:
function crop {
magick convert "$1" -define trim:edges=north,east,south,west -background white -fuzz $2% -trim "$1-done.jpg"
size="$(wc -c $1-done.jpg | awk '{print $1}')"
echo $size
if [[ $size -gt 100000 ]] #如果文件小于100k,说明转换结果是个像素点,当转换失败来处理,这里大家看需求来改
then
rm "$1"
mv "$1-done.jpg" "$1"
else
rm "$1-done.jpg"
return 0
fi
return 1
}
#要转换的文件夹
pic=( pic/**/*.jpg );
#如果只要一层目录,用下面这行
pic=( pic/*.jpg );
for file in "${pic[@]}"
do
echo $file
magick convert "$file" -define trim:edges=north,east,south,west -background white -fuzz 87% -trim "$file-done.jpg"
size="$(wc -c $file-done.jpg | awk '{print $1}')"
echo $size
if [[ $(crop $file 87) -eq 1 ]] #先试试87%
then
rm "$file"
mv "$file-done.jpg" "$file"
else
if [[ $(crop $file 86) -eq 1 ]] #失败就试试6%
then
rm "$file"
mv "$file-done.jpg" "$file"
else
if [[ $(crop $file 85) -eq 1 ]] #还是失败最后试试85%
then
rm "$file"
mv "$file-done.jpg" "$file"
fi
fi
fi
echo ok
done
跑起来
效果
切的很干净
其他用途
理论上适用于一切需要切边的操作了,都可以试试
相关文章:
Windows 10 1809, PAC file not work
用一个小脚本在win/*nix上一键下载bing每日壁纸
利用neural-style生成和目标图像风格一致的图片(win10一周年更新版可用)
自动强制结束ThunderPlatform.exe的后台进程方法
Minecraft1.72后N卡水面马赛克的通用解决办法~