Konversi png ke jpeg menggunakan Pillow

Saya mencoba mengubah png ke jpeg menggunakan bantal. Saya sudah mencoba beberapa skrip tanpa hasil. 2 ini sepertinya bekerja pada gambar png kecil seperti ini.

Kode pertama:

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

Kode kedua:

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)

Tetapi jika saya mencoba mengonversi gambar yang lebih besar seperti ini

Saya mendapatkan

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

Apa yang saya lakukan salah?

Larutan

Anda harus menggunakan metode convert():

from PIL import Image

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

info lebih lanjut: http://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.convert

Komentar (3)

Masalah dengan gambar itu bukan karena ukurannya yang besar, melainkan karena gambar itu bukan RGB, khususnya bahwa gambar itu adalah gambar indeks.

Inilah cara saya mengubahnya menggunakan shell:

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

Jadi tambahkan pemeriksaan untuk mode gambar dalam kode Anda:

if not im.mode == 'RGB':
  im = im.convert('RGB')
Komentar (0)

Anda dapat mengonversi gambar yang dibuka sebagai RGB dan kemudian Anda dapat menyimpannya dalam format apa pun. Kodenya akan menjadi:

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

Jika Anda ingin ukuran khusus gambar hanya mengubah ukuran gambar saat membuka seperti ini:

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

lalu ubah ke RGB dan simpan.

Masalah dengan kode Anda adalah Anda menempelkan png ke dalam blok RGB dan menyimpannya sebagai jpeg dengan hard coding. Anda tidak benar-benar mengubah png ke jpeg.

Komentar (2)