web-dev-qa-db-ja.com

Pillowを使用してpngをjpegに変換

私は枕を使用してpngをjpegに変換しようとしています。私は成功せずにいくつかのスクリップを試しました。この2つは、このような小さなpng画像で動作するようです。

enter image description here

最初のコード:

from PIL import Image
import os, sys

im = Image.open("Ba_b_do8mag_c6_big.png")
bg = Image.new("RGB", im.size, (255,255,255))
bg.paste(im,im)
bg.save("colors.jpg")

2番目のコード:

image = Image.open('Ba_b_do8mag_c6_big.png')
bg = Image.new('RGBA',image.size,(255,255,255))
bg.paste(image,(0,0),image)
bg.save("test.jpg", quality=95)

しかし、このような大きな画像を変換しようとすると

私は得ています

Traceback (most recent call last):
  File "png_converter.py", line 14, in <module>
    bg.paste(image,(0,0),image)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1328, in paste
    self.im.paste(im, box, mask.im) ValueError: bad transparency mask

何が間違っていますか?

35
alex

Convert()メソッドを使用する必要があります。

from PIL import Image

im = Image.open("Ba_b_do8mag_c6_big.png")
rgb_im = im.convert('RGB')
rgb_im.save('colors.jpg')

詳細: http://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.convert

67
dm2013

その画像の問題は、それが大きいということではなく、RGBではないこと、具体的にはインデックス画像であることです。 enter image description here

シェルを使用して変換した方法は次のとおりです。

>>> from PIL import Image
>>> im = Image.open("Ba_b_do8mag_c6_big.png")
>>> im.mode
'P'
>>> im = im.convert('RGB')
>>> im.mode
'RGB'
>>> im.save('im_as_jpg.jpg', quality=95)

そのため、コードに画像のモードのチェックを追加します。

if not im.mode == 'RGB':
  im = im.convert('RGB')
11
Jeremy S.

開いた画像をRGBに変換してから、任意の形式で保存できます。コードは次のとおりです。

from PIL import Image
im = Image.open("image_path")
im.convert('RGB').save("image_name.jpg","JPEG") #this converts png image as jpeg

画像のカスタムサイズが必要な場合は、次のように開いている間に画像のサイズを変更するだけです。

im = Image.open("image_path").resize(x,y)

その後、RGBに変換して保存します。

コードの問題は、pngをRGBブロックに貼り付けて、ハードコーディングによってjpegとして保存していることです。実際にpngをjpegに変換しているわけではありません。

7
Mani

サイズを変更して変換したい場合は、これを試してください、

from PIL import Image

img = i.open('3-D Tic-Tac-Toe (USA).png').resize((400,400)) # (x,y) pixels
img.convert("RGB").save('myimg.jpg')

thats ..サイズ変更および変換された画像は同じ場所に保存されます