2012-07-22 46 views
5

Điều này cũng đơn giản như vậy. Tạo hình ảnh RGB, lớn một pixel. Đặt giá trị pixel thành (a, b, c). Tiết kiệm. Vấn đề là, hình ảnh đã lưu có giá trị pixel khác nhau sau đó (a, b, c). Thông thường, với + -1 trên một trong các kênh, như thể nó là tiếng ồn ngẫu nhiên, nhưng nó phù hợp. Heres mã:PIL thay đổi giá trị pixel khi lưu

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] 

Kết quả từ này là: (0, 3, 0) (1, 3, 0)

cách nhất quán.

Nếu tôi sử dụng (4, 2, 0) là pixel để tiết kiệm, đầu ra là: (4, 2, 0) (3, 2, 0)

và (0,10, 0) cung cấp cho: (0, 10, 0) (0, 10, 1)

ví dụ.

Tại sao giá trị thay đổi khi lưu? Làm thế nào để ngăn chặn nó? Hãy giúp tôi.

Cảm ơn.

Trả lời

6

Lưu dưới dạng .png. .jpg là định dạng nén bị mất.

+0

Cảm ơn một người đàn ông! Tôi yêu ya !!!! – void

3

JPG không hứa lưu trữ chính xác pixel bạn dự định. Nó nén dữ liệu của bạn để làm cho tệp nhỏ hơn và nén dựa trên nhận thức của con người. Ý tưởng là tạo ra một mảng các điểm ảnh xuất hiện giống với một con người, mặc dù chúng là các pixel khác nhau.

Vì vậy, pixel bạn đang viết nằm ở đầu ra, nhưng các điểm ảnh liền kề đã bị thay đổi để có thể lưu toàn bộ hình ảnh trong không gian ít hơn. Điều này được gọi là "mất dữ liệu nén" vì dữ liệu bị mất.

Các định dạng hình ảnh khác không có thuộc tính này. PNG là định dạng nén không mất dữ liệu, có nghĩa là chính xác các pixel giống nhau sẽ tạo ra kết quả sau khi giải nén PNG nén. Nếu bạn lưu hình ảnh của mình dưới dạng PNG, bạn sẽ có kết quả mong muốn.

+0

các bạn đều đẫm máu rực rỡ! cảm ơn! – Ethan

+0

Có các bạn có máu đẫm máu rực rỡ .. Không nghĩ về điều này .. Ahh cảm ơn! – void

Các vấn đề liên quan