【问题标题】:Converting PNG to JPEG creates pixel noise in the background将 PNG 转换为 JPEG 会在背景中产生像素噪点
【发布时间】:2021-10-16 23:31:12
【问题描述】:

我必须将一些具有透明 bg 的 PNG 转换为简单的 JPEG,其中透明背景变为白色(我假设默认情况下会发生这种情况)。我已经尝试了所有可以在这里找到的解决方案,但是在将 PNG 保存为 JPEG 后,图像将如下所示:(嘈杂区域在 PNG 上是透明的,黑色是阴影)

转换后的图像

原图

这是我使用的代码:

# save the PNG 
response = requests.get(image_url, headers = header)
file = open("%s-%s.png" % (slug, item_id,), "wb")
file.write(response.content)
file.close()

# open the PNG and save as a JPEG
im1 = Image.open(filepath_to_png)
rgb_im = im1.convert('RGB')
rgb_im.mode
rgb_im.save(filepath_normal)

我的问题是如何防止 JPEG 具有损坏的背景?我的目标只是在 JPEG 中拥有与在 PNG 中相同的图像。

【问题讨论】:

    标签: python python-imaging-library


    【解决方案1】:

    您用来转换为 RGB 的方法适用于一些只需要直接转换的图像,例如带有硬边透明蒙版的图像,但适用于带有软边蒙版的图像(例如图像中的透明阴影) ) 它是无效的,因为转换不知道如何处理那个半透明

    处理此问题的更好方法是创建一个具有相同尺寸的新Image 并将其填充为白色背景,然后您只需粘贴原始图像:

    new_im = Image.new( "RGB", im1.size, ( 255,255,255 ) )
    new_im.paste( im1, im1 )
    new_im.save( filepath_normal )
    

    我已经使用带有软边蒙版的图像测试了这种方法,并获得了以下result

    【讨论】:

      【解决方案2】:

      你可以在 python 中使用枕头库。

      from PIL import Image
      im = Image.open("1.png")
      bg = Image.new("RGB", im.size, (255,255,255))
      bg.paste(im,im)
      bg.save("2.jpg")
      

      结果我的透明背景变成了白色。

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 2011-06-12
        • 1970-01-01
        • 2019-03-19
        • 2011-04-23
        • 2011-05-19
        • 2013-05-29
        • 2017-07-02
        • 2011-01-18
        相关资源
        最近更新 更多