【问题标题】:resize png image using rmagick without losing quality使用 rmagick 调整 png 图像大小而不损失质量
【发布时间】:2012-03-08 02:27:20
【问题描述】:

我需要在 rmagick 中将 200*200 的图像大小调整为 60*60,而不会损失图像质量。目前我正在关注一个 png 图像

img = Magick::Image.from_blob(params[:file].read)[0]
  img.write(RootPath  + params[:dir_str] + "/#{filename}") do
    self.quality=100;
    #      self.compression = Magick::ZipCompression
  end

我在生成的图像中失去了清晰度。我希望能够通过损失最少的图像质量来调整大小。 我试图设置它的质量和不同的压缩,但它们似乎都不能正常工作。 所有生成的图像看起来仍然被去除了一层颜色,并且单词字符正在失去清晰度

谁能给我一些调整png图像大小的说明?

【问题讨论】:

  • PNG 是一种无损格式,因此任何质量损失要么是 imagemagik 算法的结果,要么只是因为您将分辨率降低到三分之一,这会改变事情。
  • 真的吗?您正在将图片的大小从 200x200 = 40,000 调整为 60x60 = 3,600 - 即不到分辨率的十分之一 - 您对失去图像质量感到惊讶?
  • @ChrisLatta 你是对的;我在分辨率数学上失败了,并划分了尺寸而不是像素数。十分之一远远超过三分之一。
  • 好吧,美术设计告诉我结果图像质量下降。他给了我一张预期的 60*60 图像,使用 PS 调整大小。我检查了图像并与生成的图像进行比较,它看起来确实有很大不同。所以我尝试了 rmagick 提供的所有压缩类型,但所有结果图像都失去了清晰度
  • 如果是imagemagik的算法造成的,有没有gem工具可以提供更好的图片缩放解决方案?

标签: imagemagick image-resizing rmagick


【解决方案1】:

您正在将图片的大小从 200x200 = 40,000 调整为 60x60 = 3,600 - 即不到分辨率的十分之一 - 并且您对失去图像质量感到惊讶?可以这样想——你可以拍摄 16x16 的图像并将其调整为 5x5 而不损失质量吗?这与您在这里尝试做的大致相同。

如果你说的你想做的事情实际上是可能的,那么每张图片都可以减少到一个像素而不会降低质量。

由于美术设计师的 60x60 图像质量比您的要好,这取决于美术设计师正在使用的图像的原始尺寸。例如,如果艺术设计师正在使用 800x800 图像并从中提供您的 200x200 图像,然后在 PS 中将原始 800x800 图像缩小为 60x60,那么 60x60 图像将比您拥有的图像质量更好。这是因为您的 60x60 图像已经经历了两次质量损失:一次变为 200x200,第二次从 200x200 变为 60x60。这必然会比从原始图像调整大小的图像更糟。

【讨论】:

  • no,no,美术设计师给了我两张图片,一张是原图200*200,一张是预期的60*60。我的工作是让服务器从客户端获取上传图像,保存并为用户提供 60*60 的预览。我把上传的图片和原来的 200*200 对比一下,(嗯,用同样的 img.write 方法存储在服务器中)两者看起来很相似,肉眼看不出有什么不同,但是当检查生成的 60 *60的图片,真的不好看,200*200的图片上的字都快认不出来了(预期的60*60不是这样的),
  • 所以我想找到一种更好的方法让图像有更好的视野。
  • 请记住,质量会以指数速率下降,而不是线性速率。例如,质量/分辨率为 200x200 一半的图片不是 100x100,而是 141x141。 100x100 是 200x200 分辨率的四分之一,分辨率呈指数下降意味着当您达到 60x60 时,它还不到分辨率的十分之一,因此质量也下降了。我认为您从艺术设计师那里获得了一张 60x60 的图像,该图像的制作与您使用的过程不同 - 即您的 60x60 经历了两次调整大小和质量损失,而另一个只有一次。
  • 我认为你是对的。希望我能说服我的老板,无论如何我为他准备了一个最清晰的预览。我使用的方法是: img=imgl.resize(width, height,Magick::SincFilter) img.write(new_image_name) do self.compression = Magick::ZipSCompression self.quality=100;结束
【解决方案2】:

您可以将 png 转换为矢量图像,将矢量调整为 60x60,然后将矢量转换为 png。几乎无损。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2013-10-18
    • 2012-02-13
    • 2012-10-04
    相关资源
    最近更新 更多