本文最后更新于 1848 天前,其中的信息可能已经有所发展或是发生改变。起因 今天下了本漫画,准备放到kindle上面,按这个教程生成了几个mobi

本文最后更新于 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卡水面马赛克的通用解决办法~