设置 image_type 时 RMagick 奇怪的绿色 gif

发布于 2024-11-24 08:02:49 字数 378 浏览 2 评论 0原文

所以我得到了下面的代码,尝试使用 RMagick 在 ruby​​ 中将 png 转换为 gif,但在图像的某些部分出现了一些奇怪的绿色东西。

require 'RMagick'
include Magick
img = Magick::Image.read(pngPath.open).first
//if comment out the following line, there is no problem
img.image_type=PaletteMatteType
img.transparent("#00FF00")
img.write(gifPath)

PS:如何将深度更改为8或16以及如何将颜色更改为256?深度和颜色的默认值是 8 和 256,对吧?

So I got this following code trying to convert a png to gif in ruby using RMagick, but got some weird green stuff on some part of the image.

require 'RMagick'
include Magick
img = Magick::Image.read(pngPath.open).first
//if comment out the following line, there is no problem
img.image_type=PaletteMatteType
img.transparent("#00FF00")
img.write(gifPath)

PS: how to change the depth to 8 or 16 and How to change colors to 256? The default for depth and colors are 8 and 256 right?

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

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

发布评论

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

评论(2

栩栩如生 2024-12-01 08:02:49

大多数 RMagick 方法返回新图像,而不是就地修改它;某些方法具有用于修改内容的 ! 版本(例如 缩放scale!),但有些则不然(例如 量化)。

特别是, transparent 返回新图像:

img.transparent(颜色, opacity=TransparentOpacity) ->图片
[...]
退货
新图像

因此,只需说 img.transparent("#00FF00") 创建一个具有所需透明度的新图像,然后将其丢弃,因为您忽略了返回值。

另外,将某些内容放入较小调色板的常用方法是使用 量化

我想你想要这样的东西:

img = Magick::Image.read(pngPath.open).first
img = img.transparent('#00FF00')
img = img.quantize(256)
img.write(gifPath)

至少对我有用。

Most RMagick methods return the new image rather than modifying it in-place; some methods have ! versions for modifying things in place (such as scale and scale!) but some don't (such as quantize).

In particular, transparent returns the new image:

img.transparent(color, opacity=TransparentOpacity) -> image
[...]
Returns
A new image

So just saying img.transparent("#00FF00") creates a new image with the desired transparency and then throws it away because you are ignoring the return value.

Also, the usual way to drop something down to a smaller palette is to use quantize.

I think you want something like this:

img = Magick::Image.read(pngPath.open).first
img = img.transparent('#00FF00')
img = img.quantize(256)
img.write(gifPath)

Works for me at least.

美人骨 2024-12-01 08:02:49

不确定默认值,我会更改一些内容:

如果您需要 RMagick,则无需随后包含 Magick,我认为您可以删除此行。

常量应该以 Magick:: 为前缀,所以它可能应该是 Magick::PaletteMatteType

透明方法有 2 个参数,第一个是你想要透明的颜色,第二个是一种透明度。我认为 Gif 只知道一种,但无论如何,尝试一下

img.transparent("#00FF00", Magick::TransparentOpacity)

Not sure about the defaults by I would change a couple of thing:

if you require RMagick, there is no need to include Magick afterwards, I think you can delete this line.

Constants should be prefixed by Magick::, so it should probably be Magick::PaletteMatteType

the transparent method takes 2 arguments, the first one being the color that you want to make transparent, and the second is the kind of transparency. I think Gif knows only one kind, but anyway, try

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