2012-05-15 4 views
31

큰 이미지를 작은 이미지로 변환하여 이미지 크기를 조정하려면 PIL을 사용하고 있습니다. 품질을 너무 많이 잃지 않고 이미지의 파일 크기를 줄이기위한 표준 방법이 있습니까? 이미지의 원래 크기가 100KB라고 말하면서 5ng 또는 10KB, 특히 png 및 jpeg 형식을 얻으려고합니다.PIL을 사용하여 이미지 파일 크기를 줄이는 방법

+0

당신은 "너무 많은"품질 손실로 정의합니까? 파일 크기를 10-20 배로 줄이려면 가장 쉬운 방법은 픽셀 수를 줄이는 것입니다. 폭과 높이를 2/3로 줄이면 원래 크기의 약 1/9 크기의 그림을 얻을 수 있습니다. 그러나 그것은 여러분이 느슨한 해결책입니다. –

답변

1

PIL의 이미지 모듈의 thumbnail 기능을 참조하십시오. 이 파일을 사용하여 더 작은 버전의 파일을 다양한 파일 형식으로 저장할 수 있으며 가능한 한 많은 품질을 유지하려는 경우 ANTIALIAS 필터를 사용해보십시오.

그 외에도 원하는 최대 크기를 지정하는 방법이 있는지 확실하지 않습니다. 물론, 특정 크기가 될 때까지 다양한 품질로 파일의 여러 버전을 저장하고, 나머지를 버리고 원하는 이미지를 제공하는 기능을 작성할 수 있습니다.

+0

은 치수를 일정하게 유지하여 파일 크기를 줄이는 방법입니다. png 형식의 경우. –

+1

동일한 치수를 유지하려는 경우 이미지를 저장할 때 품질 설정을 지정하면됩니다. 체크 아웃 [답변] (http://stackoverflow.com/a/1405701/369878) – Cryptite

+0

하지만 품질 속성 png formats.even 나는 파일 크기가 동일하게 유지 품질을 변경하지 않습니다. –

54

JPEG 및 PNG 저장을위한 기본 제공 매개 변수는 optimize입니다.

# My image is a 200x374 jpeg that is 102kb large 
>>> foo = Image.open("path\\to\\image.jpg") 
>>> foo.size 
    (200,374) 
# I downsize the image with an ANTIALIAS filter (gives the highest quality) 
>>> foo = foo.resize((160,300),Image.ANTIALIAS) 
>>> foo.save("path\\to\\save\\image_scaled.jpg",quality=95) 
# The saved downsized image size is 24.8kb 
>>> foo.save("path\\to\\save\\image_scaled_opt.jpg",optimize=True,quality=95) 
# The saved downsized image size is 22.9kb 

optimize 플래그는 최대한의 크기를 줄일 수있는 방법을 찾기 위해 이미지에 추가 패스를 할 것입니다. 1.9kb는별로 좋아 보이지 않을 수도 있지만, 수백/수천 장의 그림 위에는 더할 수 있습니다.

이제 5kb에서 10kb까지 내려 받으려면 저장 옵션에서 품질 값을 변경할 수 있습니다. 얻을 것이이 경우에 85 대신 95의 품질을 사용 : 최적화되지 않은 : 최적화 된 15.1kb : 14.3kb (인수가 알아두면 기본값) 얻을 것이다 (75)의 품질을 사용 : 최적화되지 않은 : 최적화 된 11.8kb : 11.2kb

품질에 많은 영향을 미치지 않으며 파일 크기가 훨씬 작기 때문에 나는 최적화 된 품질 85를 선호합니다.

from PIL import Image 
b = Book.objects.get(title='Into the wild') 
image = Image.open(b.cover_pic.path) 
image.save(b.image.path,quality=20,optimize=True) 

그것을 보았 지 누군가에게 도움이되기를 바랍니다 :

8

당신이이 경우에 필드가 'cover_pic'라는 책과 호출 모델, 이 있다고 할 수 있습니다, 당신은 이미지를 압축하기 위해 다음을 수행 할 수 있습니다 올라가서.

관련 문제