使用 ImageMagick 为 CSS 精灵添加出血边距

使用 ImageMagick 为 CSS 精灵添加出血边距

我有一个包含相同大小精灵的 CSS 精灵表。我想为每个精灵添加 1 像素的边距,并将每个精灵的最外层像素扩展到该边距中——基本上就是全出血每个精灵的效果。例如,如果我从以下四个 8x8 精灵的精灵表开始:

Spritesheet 示例,原始

我希望最终得到这样的结果:(添加黄色矩形来调出原始精灵大小)

Spritesheet 示例,添加出血边距后

有办法添加空白的精灵之间的边距,但我翻遍了文档,也没看到添加流血像这样的边距。

我曾考虑过在每个精灵周围添加空白边距,然后将结果与自身以各种偏移量进行合成。但是当某些精灵是透明的时候,这种方法行不通,因为它会在原始精灵内部添加像素(使底部两个精灵变得非常粗体),而我只想在外部添加额外的像素。

现在显然我可以手动进行切片,然后-append/ +append。例如,我可以这样做来添加水平出血边距:

convert in.png[1x16+0+0] in.png[8x16+0+0] in.png[1x16+7+0]
        in.png[1x16+8+0] in.png[8x16+8+0] in.png[1x16+15+0]
        +append temp.png

再次使用相同的方法添加垂直线。缺点是,这需要我知道有多少个精灵,并为每一行和每一列添加参数;因此,如果我想要一些可以重复使用不同大小的精灵表的东西,我需要编写一个脚本来计算图像尺寸并生成命令行。

有没有更简单的方法可以在精灵之间添加出血边缘 - 最好是不需要我编写脚本以convert编程方式生成命令行参数的方法?

答案1

我遇到了一个非常类似的问题,我想在图像周围添加出血像素以便打印。我的问题更简单,因为我只想对整个图像执行此操作,而不是平铺图像。无论如何,它在这里:

从这个 32x32 像素的图像开始: 在此处输入图片描述到这个 70x70 版本:在此处输入图片描述

convert tree.gif  -set option:distort:viewport 70x70-19-19 \
      -virtual-pixel Edge -filter point -distort SRT 0 \
      +repage  virtual_edge.gif

您可以看到它基本上在边缘增加了 19 个像素(因为((70-32) / 2) = 19

我认为这应该能帮助您找到解决方案。更多详情这里

相关内容