2013-10-28 2 views
1

내가 Imagick를 사용하여 나는이 SOF 질문에보고했다 2.5MB스케일 이미지 최대 파일 크기

의 최대 파일 크기에 이미지를 확장하고자 해요 따라 : ImageMagick: scale JPEG image with a maximum file-size 내가 원하는 정확히 그렇지만 Imagick의 extent() 메소드에는 크기 매개 변수가 없습니다. http://www.php.net/manual/en/imagick.extentimage.php

누구나 내가 그걸 어떻게 사용할 수 있는지 알고 있습니까? 지금은 원래의 파일 크기와 대상 파일 크기 사이의 계수를 계산하여 새로운 해상도를 계산하려고 시도했지만 해상도가 파일 크기에 비례하지 않는다는 것을 알았습니다.

업데이트 - 사전에

덕분에 좋은 것 저장하기 전에 크기를 계산하는 방법이 그래서 만약 출력 형식은 항상 정도 기능을 사용하면 막심

답변

2

JPEG입니다 ' 다시 호출은 단지 이미지의 크기를 설정하는 것입니다.

JPEG의 범위 옵션을 설정하는 기능은 다음과 같습니다

$imagick->setOption('jpeg:extent', '2500kb'); 

흥미롭게도, 함수 $의 imagick-은> getImageBlob()이 옵션을 설정 한 후 충돌 것으로 보인다. 파일을 직접 가져올 수 없도록 디스크에 파일을 작성해야합니다. 없다

좋은 것 저장하기 전에 크기를 계산하는 방법이 그래서 만약

출력 형식은 항상 JPEG입니다. 각 이미지에있는 디테일의 양은 주어진 이미지 품질에 따라 압축 후 이미지의 크기를 결정합니다. 따라서 최종 크기를 줄 수있는 품질 수준을 계산할 수는 없습니다.

파일 크기를 제한하는 기본 이미지 마법 (magick) 라이브러리에서 C 코드는 다음과 같습니다

maximum=101; 
for (minimum=2; minimum < maximum;) 
{ 
    jpeg_image->quality=minimum+(maximum-minimum+1)/2; 
    status=WriteJPEGImage(jpeg_info,jpeg_image); 
    if (GetBlobSize(jpeg_image) <= extent) 
     minimum=jpeg_image->quality+1; 
    else 
     maximum=jpeg_image->quality-1; 
    } 
} 

즉, 주어진 값에 대해 허용 가능한 파일 크기를 제공하는 레벨을 찾을 때까지 다른 화질 레벨에서 파일을 재 압축합니다.

+0

감사합니다 Danack, id'WriteJPEGImage'와'GetBlobSize'는 PHP 함수입니까? 아니면 Imagick이'$ imagick-> setOption ('jpeg : extent', '2500kb')를 어떻게 처리하는지에 대한 추가 정보 였을까요? – maxwell2022

+0

@ maxwell2022 Imagick이 PHP에서 사용할 수있는 Image Magick 라이브러리에서 가져온 것입니다. C 코드입니다. Imagick 함수는 Imagick :: writeImage ($ filename); 그리고 filesize ($ filename)이다. – Danack

+0

그것은 하나의 이미지를 저장하기 위해 잠재적으로 많은 디스크 액세스입니다. 2 가지 첫 번째 글에 따라 품질을 평가할 수있는 방법이 있습니까? 즉. 'q : 100 = fs : 3000Kb'와'q : 99 = fs : 2900kb'이므로'q : 95'를 시도하고'fs : 2500kb'를 가져야합니다. 새로운 결과 ...? – maxwell2022