如何使用 ImageMagick 获得 8 位灰度和 Alpha 通道深度?

发布于 2024-11-15 20:05:26 字数 663 浏览 1 评论 0原文

我正在尝试使用 ImageMagick 创建透明 PNG。无论“转换”的咒语如何,当我对图像使用识别时,它总是说:

Depth: 8/1 bit
Channel depth:
  gray: 1 bit
  alpha: 1 bit

当我查看在网络上找到的透明 PNG 时,它说:

Depth: 8 bit
  gray: 8 bit
  alpha: 8 bit

这似乎很重要的原因是我正在使用透明我在 FFMPEG 中创建 PNG 作为水印。当我使用 ImageMagick 创建的 PNG 时,它会导致视频看起来具有 50% 的灰色不透明度。然而,当我使用我在网上找到的PNG时,它工作得很好。据鉴定,唯一的区别是深度。

以下是我尝试过的一些方法:

convert -size 640x480 xc:none -depth 8 test.png
convert -size 640x480 xc:transparent -depth 8 test.png

我注意到的另一件事是,Gimp 显示 ImageMagick 图像具有灰度色彩空间,即使识别说它是 RGB。我在网上找到的有效图像在 Gimp 和 recognize 中都显示了 RGB 色彩空间。

有什么想法吗?

I'm trying to create a transparent PNG with ImageMagick. No matter the incantations to "convert", when I use identify against the image, it always says:

Depth: 8/1 bit
Channel depth:
  gray: 1 bit
  alpha: 1 bit

When I look at a transparent PNG found on the web, it says:

Depth: 8 bit
  gray: 8 bit
  alpha: 8 bit

The reason this seems to matter is that I'm using the transparent PNGs I create as a watermark within FFMPEG. When I use the PNG that ImageMagick creates, it causes the video to appear to have like a 50% gray opacity. However, when I use the PNG I found on the web, it works fine. According to identify, the only difference is the depth.

Here are some of the things I've tried:

convert -size 640x480 xc:none -depth 8 test.png
convert -size 640x480 xc:transparent -depth 8 test.png

The other thing I noticed is that Gimp shows the ImageMagick image to have a Colorspace of Grayscale, even though identify says it's RGB. The image that I found on the web, that works, shows a Colorspace of RGB in both Gimp and identify.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

征﹌骨岁月お 2024-11-22 20:05:26

首先,关于 ImageMagick 的“灰度”。

ImageMagick 实际上没有这样的色彩空间。它仅在 RGB 空间内伪造它,方法是将 R(红色)、G(绿色)和 B(蓝色)通道中的所有值设置为相同的值。 (如果这三个值不相同,则图像不再是灰度图像。)


第二,关于您(看似)不成功创建具有 8 位 Alpha 通道的图像的尝试。

这是因为您没有将任何不同的“颜色”值放入透明区域 - 它们都是普通的(完全透明)。

尝试使用此命令转换内置 ImageMagick logo: 图片:

convert              \
   logo:             \
  -bordercolor white \
  -background black  \
  +polaroid          \
   polaroid.png

输出图像:

Polaroid 效果 by ImageMagick

将很高兴地显示您所需的 8 位 alpha 值:

identify -verbose polaroid.png | grep -A 4 "Channel depth:"

  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    alpha: 8-bit

或者尝试将内置 rose: 图像转换为半透明图像:

convert  rose:  -alpha set  -channel A  -fx '0.5'  semitransp-rose.png

相同的结果:alpha 通道的 8 位深度。

要修改原始命令之一:

convert  -size 640x480  xc:none  -depth 8  -channel A -fx 0.5  test.png

如果您identify -verbose生成的图像,您会发现 R、G 和 B 通道仅为 1 位深度,而 A 通道为 8 位深度少量。这是因为它实际上使用了与 0 不同的值,而其他通道都是 0

First, about ImageMagick's 'grayscale'.

ImageMagick doesn't actually have such a colorspace. It only fakes it within RGB space, by setting all values in the R (red), G (green) and B (blue) channels to the same values. (If the three values are not the same, the image is no longer grayscale.)


Second, about your (seemingly) unsuccessful attempts to create images with 8-bit alpha channel.

This is caused by you not putting any different 'color' values into your transparent areas -- they are all plain (fully transparent).

Try this command which converts the built-in ImageMagick logo: picture:

convert              \
   logo:             \
  -bordercolor white \
  -background black  \
  +polaroid          \
   polaroid.png

The output image:

Polaroid effect by ImageMagick

will happily show your required 8-bit alpha values:

identify -verbose polaroid.png | grep -A 4 "Channel depth:"

  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    alpha: 8-bit

Or try to convert the built-in rose: image to a semi-transparent one:

convert  rose:  -alpha set  -channel A  -fx '0.5'  semitransp-rose.png

Same result: 8-bit depth for alpha channel.

To modify one of your original commands:

convert  -size 640x480  xc:none  -depth 8  -channel A -fx 0.5  test.png

If you identify -verbose the resulting image, you'll find the R, G and B channels to be only 1-bit depth, while the A channel is 8-bit. That's because it's actually using a value different from 0, while the other channels are all 0.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文