ImageMagick - 将图像拆分为多个base64字符串,而不是文件

时间:2017-10-10 10:44:52

标签: imagemagick

我可以通过ImageMagick将图像分割成多个文件:

convert -pointsize 240 -font "DejaVuSans-Bold.ttf" label:"Test" -crop 25%x33.333% output_%d.png

我还可以将单个图像转换为base64字符串:

convert -pointsize 240 -font "DejaVuSans-Bold.ttf" label:"Test" PNG:- | base64

但是有没有办法分成多个 base64 字符串,而不需要在磁盘上创建任何文件?

2 个答案:

答案 0 :(得分:1)

我认为这与你的意思截然不同,但对我来说看起来像是一团糟!

convert -pointsize 240 label:"Test" -crop 50% -write MPR:all -delete 0-3 \
   MPR:all -delete 1-3   -write inline:png: -delete 0 \
   MPR:all -delete 0,2-3 -write inline:png: -delete 0 \
   MPR:all -delete 0,1,3 -write inline:png: -delete 0 \
   MPR:all -delete 0-2   -write inline:png: null:

它产生了大量的base64东西,包括你的文字图像的4个象限。我太懒了,无法计算12个十二分之一的所有数字,但希望你能看到我做了什么。

MPR" Magick Pixel Register" ,它基本上是一个能够容纳多个图像的命名内存块。因此,50%宽度和50%高度的初始裁剪将4张图像放入称为all的MPR中。然后我有选择地回忆MPR并删除我不感兴趣的那些,并将我感兴趣的那个写成内联base64图像。

我猜您可以通过sedtr传递base64并将其拆分到每个字符串末尾的=,然后使用结果填充数组以便您可以将每个象限作为一个数组元素访问 - 但我还没有这样做,因为每次我做一些有用的事情,OP都会回来并告诉我他正在使用Windows ......

答案 1 :(得分:1)

您可以使用此命令查看您的ImageMagick版本是否包含编码为base64的代理...

convert -list format | grep -i inline

如果输出显示伪格式" INLINE"使用" rw +",那么这样的命令应该可以做你想要的......

convert -pointsize 240 label:"Test" -crop 4x3@ inline:png:output_%02d.b64

这将创建12个base64文件,每个文件来自通过使用" -crop 4x3 @"裁剪输入图像而创建的12个图块。

使用如下命令恢复图像......

convert inline:output_*.b64 output_%02d.png

我有IM 6.7.7可以阅读" INLINE"伪格式但不写它。我有IM版本6.9.8和7.0.7,可以读取和写入" INLINE"格式。因此,这是否适合您将取决于您当前的IM版本以及遵守的代表。

已编辑添加...

如果您根本不想将base64文件写入磁盘,则会变得有点复杂和混乱。 Mark Setchell的回答应该指出你正确的方向。这是一种类似的方法......

convert -pointsize 240 label:"Test" -crop 4x3@ \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) -delete 0 \
    \( -clone 0 -write inline:png:- \) null:

这应该将输入图像裁剪成4x3的12个图块,然后将它们输出为12个单独的base64编码文本字符串。