2017-04-06 10 views
10

pngをピローを使用してjpegに変換しようとしています。私は成功せずにいくつかのスクリプトを試しました。これらの2は、このような小さなpngイメージで動作するように見えました。Pythonでピローを使用してpngをjpegに変換する

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") 

セカンドコード:

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) 

しかし、私はこの1

のような大きな画像を変換しようとした場合

私は私が間違って何をやっている

Traceback (most recent call last):

  File "png_converter.py", line 14, in 

    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

を取得していますか?

+0

あなたは[この]を試してみました(HTTP ://stackoverflow.com/questions/7911451/pil-convert-png-or-gif-with-transparency-to-jpg-without)? –

+0

はい、私は、それは最初の例です –

答えて

3

開いた画像を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に変換しているわけではありません。

+0

すべての答えは良いです、ありがとう、しかし、任意のideeaどのようにサイズを圧縮することができますか? –

+0

画像を保存する際にoptimize = Trueを試してください。 – Mani

3

そのイメージの問題ではない、それは大であるということです、それは特にその、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') 
関連する問題