【问题标题】:Python Image Library: clean DownsamplingPython图像库:干净的下采样
【发布时间】:2011-10-29 00:26:35
【问题描述】:

我在尝试让 PIL 很好地对图像进行下采样时遇到了麻烦。在这种情况下,目标是让我的网站在需要不同大小时自动下采样->缓存原始图像文件,从而消除维护同一图像的多个版本的痛苦。但是,我没有任何运气。我试过了:

image.thumbnail((width, height), Image.ANTIALIAS)
image.save(newSource)

image.resize((width, height), Image.ANTIALIAS).save(newSource)

ImageOps.fit(image, (width, height), Image.ANTIALIAS, (0, 0)).save(newSource)

它们似乎都在执行最近邻下采样,而不是按应有的方式对像素进行平均因此它将图像变成

http://www.techcreation.sg/media/projects//software/Java%20Games/images/Tanks3D%20Full.png

http://www.techcreation.sg/media/temp/0x5780b20fe2fd0ed/Tanks3D.png

这不是很好。有没有其他人碰到过这个问题?

【问题讨论】:

    标签: python image python-imaging-library downsampling


    【解决方案1】:

    该图像是索引颜色(调色板或 P 模式)图像。可以使用的颜色数量非​​常有限,并且调整大小的图像中的像素不太可能出现在调色板中,因为它需要很多中间颜色。所以它在调整大小时总是使用最近邻模式;这确实是保持相同调色板的唯一方法。

    此行为与 Adob​​e Photoshop 中的行为相同。

    如果需要,您希望先转换为 RGB 模式并调整其大小,然后在保存之前返回调色板模式。 (其实我只是将它保存为RGB模式,然后在调整大小的图像文件夹上打开PNGCrush。)

    【讨论】:

    • 如何判断图像是否为索引颜色?我知道 GIF 总是被索引,但我认为 PNG 就像是无损压缩的 jpeg,因此像其他人一样使用 RGB。
    • PNG 可以是 8 位索引颜色或 24 位 RGB 真彩色。您发布的内容已编入索引。在这种情况下,PIL 中的图像模式应为“P”。
    【解决方案2】:

    这是一年多了,但万一有人还在寻找:

    这是一个代码示例,它将查看图像是否处于调色板模式并进行调整

     import Image # or from PIL import Image
     img = Image.open(sourceFile)
     if 'P' in img.mode: # check if image is a palette type
         img = img.convert("RGB") # convert it to RGB
         img = img.resize((w,h),Image.ANTIALIAS) # resize it
         img = img.convert("P",dither=Image.NONE, palette=Image.ADAPTIVE) 
               #convert back to palette
     else:
         img = img.resize((w,h),Image.ANTIALIAS) # regular resize
     img.save(newSourceFile) # save the image to the new source
     #img.save(newSourceFile, quality = 95, dpi=(72,72), optimize = True) 
        # set quality, dpi , and shrink size
    

    通过将调色板版本转换为 RGB,我们可以使用抗锯齿调整它的大小。如果您想将其重新转换回来,则必须将抖动设置为 NONE,并使用 ADAPTIVE 调色板。如果没有包含选项,您的结果(如果重新转换为调色板)将是颗粒状的。您还可以在保存功能中对某些图像格式使用质量选项,以进一步提高质量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      相关资源
      最近更新 更多