起因
今天下了本漫画,准备放到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
跑起来
效果
切的很干净
其他用途
理论上适用于一切需要切边的操作了,都可以试试
转载保留版权:晨旭的博客 » 《用magick自动去除漫画图片的白边》如果喜欢可以: 点击右侧上方的邮件订阅,订阅本站
也可以试试人工智能的方法
大佬救我,树莓派怎么安装zeronet
支持一下交个朋友
大佬,这个.sh文件咋用windows运行啊,查了半天,装git之类的,有点麻烦,就想问下有没有其他方便点的
装个msys2
好的,非常感谢,我今天试一下
还有这个
#要转换的文件夹
pic=( pic/**/.jpg );
我想选择
E:\dell\视频\漫画\shiyan
其中的所有jpg(另外,wepb图片格式可以吗?)
是否是这样的
pic=( pic/E/dell/视频/漫画/.jpg );