如何检测图像是否可以粘贴背景?

时间:2019-02-13 12:54:40

标签: python-2.7 image-processing python-imaging-library

我正在尝试将Pillow==5.4.1中的图像转换为JPEG。所以我用下面的代码:

from PIL import Image as PilImage
img = PilImage.open('energy.png')
img.convert('RGB').save('newimage.jpeg', 'jpeg')

某些图像工作正常,但是当我尝试使用此图像时:

enter image description here

我的结果如下:

enter image description here

好的,我有一个问题,当图像具有透明度时,背景会变成黑色。所以我研究并遵循以下代码:

PIL Convert PNG or GIF with Transparency to JPG without

from PIL import Image
im = Image.open("energy.png")
bg = Image.new("RGB", im.size, (255,255,255))
bg.paste(im,im)
bg.save("newimage.jpeg")

这对这张图片很好用:

enter image description here

背景变成白色,没问题,我可以用它生存。但是当我将此代码用于其他图像时:

In [28]: im = Image.open('444.png')

In [29]: bg = Image.new("RGB", im.size, (255,255,255))

In [30]: bg.paste(im,im)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-f36dbc2a3949> in <module>()
----> 1 bg.paste(im,im)

/home/developer/.virtualenvs/prisvo/local/lib/python2.7/site-packages/PIL/Image.pyc in paste(self, im, box, mask)
   1455         if mask:
   1456             mask.load()
-> 1457             self.im.paste(im, box, mask.im)
   1458         else:
   1459             self.im.paste(im, box)

ValueError: bad transparency mask

此错误与这两个图像出现:

enter image description here enter image description here

这两个图像之一是png(不透明),另一个已经是jpeg,但是我需要接受jpg和png。因为我需要这样做:

img.convert('RGB').save(smallJpegThumbStr, 'jpeg', quality=75)

我需要紧凑。

所以我使用了(我认为)一个不好的实现:

  try:
      bg = PilImage.new("RGB", img.size, (255,255,255))
      bg.paste(img,mask=img)
      bg.convert('RGB').save(mediumJpegThumbStr, 'jpeg', quality=75)
  except:
      img.convert('RGB').save(mediumJpegThumbStr, 'jpeg', quality=75)

换句话说,当发生错误时,我转到另一个实现。我认为这是不对的。我的第一个想法是使用第一个实现(在Expect内部)来jpeg图像,第二个实现到png(在try中)。但是错误也会发生在png(对于某些图像)上。我不知道此命令bg.paste(im,im)是否存在条件,或者是否存在检测此错误的方法:ValueError: bad transparency mask,而无需使用try。

此命令帮助。但是:

bg.paste(im,mask=im.convert('L'))

enter image description here

0 个答案:

没有答案