2011-10-29 2 views
1

PIL을 멋지게 다운 샘플링하는 데 문제가있었습니다. 이 경우 목표는 내 웹 사이트가 다른 크기가 필요할 때마다 원본 이미지 파일을 자동으로 다운 샘플링하여 캐시하므로 동일한 이미지의 여러 버전을 유지 관리하는 데 따른 고통을 없애기위한 것입니다. 그러나 나는 운이 없었습니다. 나는 시도했다 :Python 이미지 라이브러리 : clean downsampling

image.thumbnail((width, height), Image.ANTIALIAS) 
image.save(newSource) 

image.resize((width, height), Image.ANTIALIAS).save(newSource) 

ImageOps.fit(image, (width, height), Image.ANTIALIAS, (0, 0)).save(newSource) 

그들 모두를 오히려 정상적으로 픽셀 이상 평균보다, 가장 가까운-neighbout의 다운 샘플링을 수행하는 것 따라서 이미지는 다음과 같이 바뀝니다.

http://www.techcreation.sg/media/projects//software/Java%20Games/images/Tanks3D%20Full.png

http://www.techcreation.sg/media/temp/0x5780b20fe2fd0ed/Tanks3D.png

에 아주 좋은하지 않은. 다른 사람이이 문제에 부딪 혔습니까?

답변

4

해당 이미지는 색인 된 색상 (팔레트 또는 P 모드) 이미지입니다. 매우 제한된 수의 색상이 있으며 크기가 조정 된 이미지의 픽셀이 팔레트에있을 가능성은 적습니다. 중간 색상이 많이 필요하기 때문입니다. 따라서 항상 크기를 조정할 때 가장 가까운 이웃 모드를 사용합니다. 이것은 같은 팔레트를 유지하는 유일한 방법입니다.

이 동작은 Adobe Photoshop에서와 동일합니다.

원하는 경우 먼저 RGB 모드로 변환하고 크기를 조정 한 다음 저장하기 전에 팔레트 모드로 돌아가고 싶습니다. (사실 난 그냥 RGB 모드에 저장 것, 그리고 크기가 조정 된 이미지의 폴더에 PNGCrush에게 느슨한 돌립니다.)

+0

이미지가 색인 된 색상인지 어떻게 알 수 있습니까? 나는 GIF가 항상 색인이 붙어 있다는 것을 알고 있지만 PNG는 무손실 압축을하는 jpeg와 같았고 다른 어떤 사람들처럼 RGB를 사용한다고 생각했습니다. –

+1

PNG는 8 비트 인덱스 색 또는 24 비트 RGB 트루 컬러가 될 수 있습니다. 귀하가 올린 글은 색인이 생성됩니다. 이 경우 PIL의 이미지 모드는 "P"여야합니다. – kindall

2

을 이것은 세 이상이지만, 경우에 사람이 여전히 찾고 : 여기

A는 이미지가 팔레트 모드에 있는지 확인하고, RGB에 팔레트 버전을 전환하여 조정

import Image # or from PIL import Image 
img = Image.open(sourceFile) 
if 'P' in img.mode: # check if image is a palette type 
    img = img.convert("RGB") # convert it to RGB 
    img = img.resize((w,h),Image.ANTIALIAS) # resize it 
    img = img.convert("P",dither=Image.NONE, palette=Image.ADAPTIVE) 
      #convert back to palette 
else: 
    img = img.resize((w,h),Image.ANTIALIAS) # regular resize 
img.save(newSourceFile) # save the image to the new source 
#img.save(newSourceFile, quality = 95, dpi=(72,72), optimize = True) 
    # set quality, dpi , and shrink size 

를 만들 것입니다 코드의 샘플, 우리는 안티 별명으로 크기를 조정할 수 있습니다. 다시 되돌리려면 디더링을 NONE으로 설정하고 ADAPTIVE 팔레트를 사용해야합니다. 옵션이 포함되지 않은 경우 결과 (팔레트로 재 변환 된 경우)가 거칠어집니다. 또한 저장 기능에서 일부 이미지 형식의 품질 옵션을 사용하여 품질을 더욱 향상시킬 수 있습니다.