2017-04-06 19 views
10

Tôi đang cố chuyển png thành jpeg bằng gối. Tôi đã thử một số kịch bản mà không thành công. Những 2 dường như làm việc trên hình ảnh png nhỏ như thế này.Chuyển png sang jpeg bằng gối trong python

enter image description here

mã đầu tiên:

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

mã thứ hai:

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) 

Nhưng nếu tôi cố gắng để chuyển đổi một hình ảnh lớn hơn như thế này một

Tôi đang nhận được

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

Tôi đang làm gì sai?

+0

Các bạn đã thử [này] (http : //stackoverflow.com/questions/7911451/pil-convert-png-or-gif-with-transparency-to-jpg-without)? –

+0

vâng, tôi đã làm, đó là ví dụ đầu tiên –

Trả lời

3

Bạn có thể chuyển đổi hình ảnh đã mở thành RGB và sau đó bạn có thể lưu hình ảnh ở bất kỳ định dạng nào. Mã này sẽ là:

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

Nếu bạn muốn kích thước tùy chỉnh của hình ảnh chỉ thay đổi kích thước hình ảnh trong khi mở như thế này:

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

và sau đó chuyển sang RGB và lưu nó.

Sự cố với mã của bạn là bạn đang dán png vào khối RGB và lưu nó dưới dạng jpeg bằng mã hóa cứng. bạn không thực sự chuyển đổi png sang jpeg.

+0

tất cả các câu trả lời là tốt, cảm ơn bạn, nhưng bất kỳ ideea làm thế nào bạn có thể nén kích thước là tốt? –

+0

Thử tối ưu hóa = True khi lưu hình ảnh. – Mani

3

Vấn đề với hình ảnh mà không phải là nó lớn là, nó là nó không phải là RGB, cụ thể là đó là một hình ảnh chỉ mục. enter image description here

Đây là cách tôi chuyển đổi nó bằng cách sử dụng vỏ:

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

Vì vậy, thêm một tấm séc cho chế độ của hình ảnh trong mã của bạn:

if not im.mode == 'RGB': 
    im = im.convert('RGB') 
Các vấn đề liên quan