如何使用 imagemagick 将透明 png 旋转 45 度并保持新图像透明?

Posted

技术标签:

【中文标题】如何使用 imagemagick 将透明 png 旋转 45 度并保持新图像透明?【英文标题】:How can I rotate a transparent png by 45 degrees using imagemagick and keep the new image transparent? 【发布时间】:2011-05-06 11:44:58 【问题描述】:

我有一个 16x16 透明 png,我做到了

convert -rotate -45 a.png b.png

这旋转了它并创建了一个大小为 22x22 的新图像 b.png,当我在背景上使用它时,显示原始图像 (16x16) 与底层背景一起旋转,但出现的新填充显示为白色背景。

新的填充物怎么可能也是透明的?

如果这是不可能的,那么我怎样才能让新图像的所有背景都是一种颜色?

【问题讨论】:

【参考方案1】:

使用 -background 选项指定透明色,并将 alpha 设置为零:

convert -background 'rgba(0,0,0,0)' -rotate 45 a.png b.png

【讨论】:

应该是convert -background 'rgba(0,0,0,0)' -rotate 45 a.png b.png【参考方案2】:

您还可以使用以下选项:

  -background none

【讨论】:

仅供参考:取决于 ImageMagick 的安装方式和配置,-background none' might result in an error like convert:无法访问配置文件colors.xml' @ warning/configure.c/GetConfigureOptions/589.。当 ImageMagick 由于安装位置而找不到配置文件时,就会发生这种情况。如果遇到这种情况,可以改用-background 'rgba(0,0,0,0)'【参考方案3】:

我也遇到了同样的问题,但是我使用的是这样的命令:

convert a.png -rotate 45 -background transparent b.png

必须是:

convert -rotate 45 -background transparent a.png b.png

所以,这实际上有点帮助,谢谢:)

【讨论】:

【参考方案4】:
convert -rotate 66 -background none c:\input.png c:\output.png

很适合我

【讨论】:

【参考方案5】:

我用C#来旋转它

using (MagickImage mimg = new MagickImage(path))

  mimg.BackgroundColor = MagickColor.Transparent;
  mimg.Alpha(AlphaOption.Background);
  mimg.AlphaColor = new MagickColor(System.Drawing.Color.White);
  mimg.FillColor = new MagickColor(255, 255, 255, 0);
  mimg.Rotate(degree);                    

【讨论】:

我认为您不需要其中的 Alpha、AlphaColor 和 FillColor 调用。您只需要确保将 BackgroundColor 设置为透明 before 旋转。

以上是关于如何使用 imagemagick 将透明 png 旋转 45 度并保持新图像透明?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ImageMagick/convert 创建半透明 PNG

使用imagemagick将EPS转换为PNG时如何添加填充?

Imagemagick 将透明图像裁剪为蒙版

ImageMagick - 设置透明带 AlphaChannel 的 png 图片的透明度

imagemagick 将 RGB PNG 转换为 CMYK PDF

perl imagemagick中的png水印,使png透明