2010-01-03 2 views
11

나는 PNG 최적화 서비스를 사용하여 "생각 나게"했다고 생각합니다. 당신은 웹 링크를 보내고 파일 크기가 멋지게 잘 찍혀있는 모든 PNG 이미지를 반환했습니다 ...PNG 최적화 도구

내 웹 사이트의 이미지 업로드 프로세스의 일부로 비슷한 최적화 기능을 구현하고 싶습니다. 누구든지 내가 이것을 활용할 수있는 선재 라이브러리 (PHP 또는 Python 선호)를 알고 있습니까? 간단한 구글이 몇 가지 커맨드 라인 스타일 툴을 가르쳐 주었지만 가능한 한 그 루트를 내려 가지 않았다.

+2

내가 인기있는 도구 중 하나 (optipng 생각하지 않습니다 PHP로 실행 , pngcrush, et c.) 바인딩이 있습니다. ImageMagick (PHP 용) 및 PIL (Python 용)은 출력 설정을 조정하여 어딘가에 가져다 줄 수 있지만 명령 줄 도구는 더 많이 최적화되어 있습니다. –

답변

14

이 명령 줄 도구

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB -brute -l 9 -max -reduce -m 0 -q IMAGE 
    optipng -o7 -q pngout.png 
    pngout pngout.png -q -y -k0 -s0 
    advpng -z -4 pngout.png > /dev/null 
+1

안녕하세요, 6 년이 지났지 만 인터넷에 접속 한 것으로 나타났습니다. 이것들은 적절한 도구 목록입니다. png/jpg와 비슷한 압축 도구를 모두 나열 할 수 있습니까? 나는 당신이 사용하는 것/좋아하는 것의 이름 목록을 필요로합니다, 왜냐하면이 도구들은 6 년 후에 더 좋은 것을 발견했을지도 모른다고 생각하기 때문에 좋습니다 :) 미리 감사드립니다. 대단한 답장. – S00

3

만큼 당신의 PHP가 GD2 지원 (요즘 매우 일반적)로 컴파일과 같이

<?php 
$image = imagecreatefromstring(file_get_contents('/path/to/image.original.png')); 
imagepng($image, '/path/to/image.smushed.png', 9); 

이 GD2가 (단지 PNG)를 이해하고 모든 이미지 형식으로 읽어와 출력 최대 압축으로 gzip으로 압축 된 PNG 파일 수준을 희생하지 않고

몇 년 전에 비해 사용률이 낮을 수 있습니다. 대부분의 이미지 편집자들은 gzipping이 이전처럼 CPU를 많이 사용하지 않기 때문에 이미이 작업을 수행합니다.

+0

고마워,하지만 난 그냥 gzipping 이상, 즉 색 보정 및 감마 정보를 제거하는 뭔가를 쫓고있어. – Mathew

+0

간단한 압축 외에 다른 최적화 기법이 있다는 것에 동의하지만, 사용자가 요구하는 것은 _optimizing_이 아니라 오히려 _destroying_ 업로드 된 이미지입니다. – Mike

+0

바하마! 의미론! :) 정확함의 요지로 : 내가 묻는 것은 어떤 식 으로든 이미지를 파괴하는 것이 아니라 오히려 이미지가 특정 (불필요한) 정보를 파괴하여 최적화되는 것입니다. – Mathew

2

혹시 PNGCrush에 대해 들어 보셨습니까? PNG and MNG Tools at SourceForge의 소스 코드를 확인하고 파이썬으로 바꾸거나 감쌀 수 있습니다.

+1

PNGcrush는 순수 Python 솔루션보다 빠르며 외부 프로그램 호출은 Python에서 쉽습니다. 가장 명백한 단점은 운영 체제가 새로운 프로세스를 생성하기위한 비용이 매우 높다는 것입니다. Windows. – Theran

+0

나는 여하튼 OS에 관계없이 모든 파일 업로드에 대한 새로운 프로세스를 생성하는 것이 좋은 생각인지 의심 스럽다. – Eric

2

내가 (가마와 ICCP와 같은) 다른 덩어리를 버리고의 지혜에 의문을 제기하지만 것이라고는 당신이 덩어리 제거 PyPNG를 사용하여 매우 쉽게 수행 할 작업의 경우 :

#!/usr/bin/env python 
import png 
import sys 

input=sys.stdin 
out=sys.stdout 

def critical_chunks(chunks): 
    for type,data in chunks: 
     if type[0].isupper(): 
      yield type,data 

chunks = png.Reader(file=input).chunks() 
png.write_chunks(out, critical_chunks(chunks)) 

critical_chunks 기능입니다 기본적으로 중요한 PNG 청크를 제외한 모든 것을 필터링합니다 (중요한 청크의 경우 4 글자 유형은 대문자로 시작합니다).

+0

zlib 압축은 변경되지 않고 청크를 전달하므로 변경되지 않습니다. –