2013-03-18 4 views
3

JPEG로 실험 한 결과 the doc에 "100은 JPEG 양자화 단계를 완전히 비활성화합니다."라고 말했습니다.PIL jpeg, 픽셀 색상을 유지하는 방법

그러나 저장 중에 픽셀 수정이 필요합니다.

import Image 
red = [20,30,40,50,60,70]; 
img = Image.new("RGB", [1, len(red)], (255,255,255)) 
pix = img.load() 

for x in range(0,len(red)): 
    pix[0,x] = (red[x],255,255) 

img.save('test.jpg',quality=100) 

img = Image.open('test.jpg') 
pix = img.load() 

for x in range(0,len(red)): 
    print pix[0,x][0], 

내가 예상치 못한 결과를 얻었다 : 여기 내 코드는 22 25 42 45 62 65 나는 픽셀 값을 유지하기 위해 어떻게해야합니까? 나는 또한 imagejpeg을 사용하여 PHP를 시도했으며 quality = 100 일 때 올바른 값을 주었다. 는 항상 손실 성 위험을 수행

답변

2

JPEG는 여러 단계로 이루어져 있으며 그 중 많은 부분이 약간의 손실을 가져옵니다. 빨간색 만 포함 된 샘플 이미지를 사용하면 가장 나쁜 범죄자 (downsampling or chroma subsampling)를봤을 가능성이 큽니다. 눈이 색 변화보다 밝기 변화에 더 민감하기 때문에 색 정보의 절반은 버려집니다.

일부 JPEG 인코더는 하위 샘플링을 해제하도록 구성 할 수 있지만 필자는 PIL의 경우라고 생각하지 않습니다. 어떤 경우에도 손실을 초래하는 다른 단계가 있기 때문에 가능한 경우에도 완전히 손실되지 않는 파일을 제공하지는 않습니다.

+2

ok PIL에서 서브 샘플링을위한 옵션이 있습니다. img.save()에서 subsampling = 0으로 설정하면 정확한 20-70이됩니다. 빨강, 초록, 파랑의 모든 값을 동일하게 설정하는 경우도 있습니다. – w00d

+0

@ w00d, 문서화 된 곳으로 연결되는 링크를 제공 할 수 있습니까? 나는 그것을 발견 할 수 없었다. –

+0

내가 문서화되지 않은 것 같아서 출처 : https://bitbucket.org/effbot/pil-2009-raclette/src/cd403356263f039a4a48a1111c7f5cc38686e481/PIL/JpegImagePlugin.py?at=default#cl-437 – w00d

1

JPEG을 피하기 위해 어떤 옵션이있는 경우

나는 보존하기 위해 png를 사용할 수 있지만, 나는이 뒤에 이유를 알고 싶어하고, Is Jpeg lossless when quality is set to 100?를 참조하십시오.

특히 실험이 과학을위한 것이라면 가장 좋은 방법입니다. JPEG로 시작해야한다고해도 (가능성은 희박함) 모든 종류의 분석을 위해 무손실 형식으로 즉시 변환해야합니다 및 수정.

파이어 폭스와 함께 무손실 JPEG 작업을 시도하고 싶다면 jpegtran, "the lossless jpeg image transformation software from the Independent Jpeg Group"을 시도해 볼 수는 있지만 @Mark 노트와 같이 아주 멀리 떨어져있는 것은 아닙니다. 그런데

는 양자화는 모두 손실 또는 무손실 압축에 사용되는, 그래서 내 생각

... (100)가 완전히 JPEG 양자화 단계를 비활성화한다는 것입니다. [1]

은 단순히 전혀 압축되지 것을 의미.

+2

'jpegtran '으로 할 수있는 일은 꽤 제한되어 있습니다. –

관련 문제