Önce, bir tek un-iç içe listede piksel dizilerini olması gerekir Hızlı çözüm:
pixels_out = []
for row in pixels:
for tup in row:
pixels_out.append(tup)
Sonraki, giriş görüntüsünün özelliklerini kullanarak, yeni bir görüntü nesnesi yapmak ve içine veri koymak:
image_out = Image.new(image.mode,image.size)
image_out.putdata(pixels_out)
Son olarak, kaydedin:
image_out.save('test_out.png')
Listeniz anlama listelerin bir listesini, dilimleme (i*width:(i+1)*width
) tarafından üretilen ve bunların sonuncusu üretir
Temel mesele. Anlayışınız çok daha kolay olabilir: pixels = [pixel for pixel in pixels]
. Açıkçası, bu aynı listeyi çıkarır, pixels
, ancak piksel üzerinde bir işlem gerçekleştirmek için bu fikri kullanabilirsiniz. pixels = [operation(pixel) for pixel in pixels]
.
Gerçekten de aşırı düşünmüşsünüz. Görüntü boyutlarını yönetmek zorunda değilsiniz. Pikselleri bir listeye almak ve daha sonra putdata
ile eşit boyutlu bir görüntüye koymak, PIL ile aynı şekilde doğrusallaştırıldıkları için sırayla tutar.
Kısacası
, bu orijinal pasajı olması gereken budur:
from PIL import Image
image = Image.open("test.png")
image_out = Image.new(image.mode,image.size)
pixels = list(image.getdata())
image_out.putdata(pixels)
image_out.save('test_out.png')
Bu işlem düzgün bir fikirdir, ancak PIL'yi zaten kullanıyorsanız aşırı hız. – rjonnal
OP, ne kullandığını belirtmedi. “Python'da bir piksel değerleri listesinden nasıl bir PNG resim dosyası oluşturabilirim?” Diye sordu. Bir cevap verdim. Belki de verileri daha sonra tekrar kullanmak ister mi? İzin verilmiyor mu, neyi? –
Kahire kesinlikle izin verilir *. Veri yeniden kullanımı ile ne ilgisi olduğundan emin değilim. OP, PIL kullandığını belirtmiştir. – rjonnal