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?
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
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')
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.