2012-07-22 12 views
5

Esto es tan simple como se pone. Haga una imagen RGB, un píxel grande. Establezca el valor de píxel en (a, b, c). Salvar. El problema es que la imagen guardada tiene un valor de píxel diferente a continuación (a, b, c). Usualmente, con + -1 en uno de los canales, como si fuera ruido aleatorio, pero es consistente. Heres el código:PIL cambia el valor de píxel al guardar

from PIL import Image 
newImg = Image.new('RGB', (1,1), "black") 
pixels = newImg.load() 
pixels[0,0] = (0,3,0) 
newImg.save("point.jpg") 
savedImage = Image.open("point.jpg") 
pixelsSaved = savedImage.load() 

print pixels[0,0] 
print pixelsSaved[0,0] 

La salida de este es: (0, 3, 0) (1, 3, 0)

consistente.

Si uso (4, 2, 0) que el píxel para guardar, la salida es: (4, 2, 0) (3, 2, 0)

y (0,10, 0) da: (0, 10, 0) (0, 10, 1)

por ejemplo.

¿Por qué cambia el valor al guardar? ¿Cómo lo evito? Por favor ayuda.

Gracias.

Respuesta

6

Guárdalo como .png. .jpg es un formato comprimido con pérdida.

+0

Gracias a ton hombre! ¡¡¡¡Te amo!!!! – void

3

JPG no promete almacenar exactamente los píxeles que desea. Comprime tus datos para hacer que el archivo sea más pequeño, y la compresión se basa en la percepción humana. La idea es crear una matriz de píxeles que parezcan iguales para un humano, aunque sean píxeles diferentes.

El píxel que está escribiendo está en la salida, pero los píxeles adyacentes se han modificado para poder almacenar toda la imagen en menos espacio. Esto se denomina "compresión con pérdida" porque los datos se pierden.

Otros formatos de imagen no tienen esta propiedad. PNG es un formato comprimido sin pérdida, lo que significa que exactamente los mismos píxeles obtendrán resultados después de descomprimir un PNG comprimido. Si guarda su imagen como PNG, tendrá el resultado que desee.

+0

¡Ustedes son malditamente brillantes! ¡Gracias! – Ethan

+0

Sí, ustedes son malditamente brillantes ... No pensé en esto ... ¡Ah, gracias! – void

Cuestiones relacionadas