문제

고품질 PNG 파일이 많이 있습니다. 품질을 유지하면서 파일 크기가 작기 때문에 PHP를 사용하여 JPG로 변환하고 싶습니다. 웹에 JPG 파일을 표시하고 싶습니다.

PHP는이 작업을 수행 할 기능/라이브러리가 있습니까? 품질/압축이 좋은가요?

도움이 되었습니까?

해결책

이를 수행하여 PNG를 흰색의 투명성으로 JPG로 안전하게 변환하십시오.

$image = imagecreatefrompng($filePath);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagedestroy($image);
$quality = 50; // 0 = worst / smaller file, 100 = better / bigger file 
imagejpeg($bg, $filePath . ".jpg", $quality);
imagedestroy($bg);

다른 팁

변환하려는 것을 조심하십시오. JPG는 PNG를하는 반면 Alpha-Transparency를 지원하지 않습니다. 당신은 그 정보를 잃을 것입니다.

변환하려면 다음 기능을 사용할 수 있습니다.

// Quality is a number between 0 (best compression) and 100 (best quality)
function png2jpg($originalFile, $outputFile, $quality) {
    $image = imagecreatefrompng($originalFile);
    imagejpeg($image, $outputFile, $quality);
    imagedestroy($image);
}

이 기능은 imagecreatefrompng() 그리고 imagejpeg() GD 라이브러리의 기능.

이것은 'image.png'를 70% 이미지 품질로 'image.jpg'로 변환하는 작은 예입니다.

<?php
$image = imagecreatefrompng('image.png');
imagejpeg($image, 'image.jpg', 70);
imagedestroy($image);
?>

도움이되기를 바랍니다

<?php
function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth) {
    $explode = explode(".", $imageName);
    $filetype = $explode[1];

    if ($filetype == 'jpg') {
        $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
    } else
    if ($filetype == 'jpeg') {
        $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
    } else
    if ($filetype == 'png') {
        $srcImg = imagecreatefrompng("$imageDirectory/$imageName");
    } else
    if ($filetype == 'gif') {
        $srcImg = imagecreatefromgif("$imageDirectory/$imageName");
    }

    $origWidth = imagesx($srcImg);
    $origHeight = imagesy($srcImg);

    $ratio = $origWidth / $thumbWidth;
    $thumbHeight = $origHeight / $ratio;

    $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight);
    imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $origWidth, $origHeight);

    if ($filetype == 'jpg') {
        imagejpeg($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'jpeg') {
        imagejpeg($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'png') {
        imagepng($thumbImg, "$thumbDirectory/$imageName");
    } else
    if ($filetype == 'gif') {
        imagegif($thumbImg, "$thumbDirectory/$imageName");
    }
}
    ?>

이것은 아주 좋은 썸네일 스크립트입니다 =) 예가 있습니다.

$ path = 원본 그림이있는 폴더로가는 경로. $ name = 썸네일을 만들려는 파일의 파일 이름. $ humbpath = 썸네일을 저장하려는 디렉토리로가는 경로. $ maxwidth = px에서 썸네일의 최대 너비. 100 (wich는 100px)입니다.

createThumbnail($path, $name, $thumbpath, $maxwidth);

당신은 조사하고 싶을 수도 있습니다 이미지 magick, 일반적으로 이미지 처리를위한 사실상 표준 라이브러리로 간주됩니다. 그래도 추가 PHP 모듈을 설치해야합니다. 기본 설치로 제공되는지 확실하지 않습니다.

HTH.

PHP에는 일부가 있습니다 이미지 처리 기능 와 함께 imagecreatefrompng 그리고 imagejpeg 기능. 첫 번째는 PNG 이미지 파일의 내부 표현을 생성하고 두 번째는 해당 표현을 JPEG 이미지 파일로 저장하는 데 사용됩니다.

보다 이 PHP 이미지 라이브러리 목록. 기본적으로 GD 또는 Imagemagick입니다.

나는 그것이 OP에 대한 정확한 답이 아니라는 것을 알고 있지만, 대답이 이미 주어졌다 ...

PHP 에서이 작업을 정말로해야합니까?
내가 의미하는 바는 : 많은 이미지를 변환해야한다면 PHP에서 수행하는 최선의 방법이 아닐 수도 있습니다. memory_limit, max_execution_time, ...

또한 GD가 최고의 품질/크기 비율을 얻지 못할 수도 있다고 말합니다. 그러나 그것에 대해 확실하지 않습니다 (GD와 다른 솔루션을 비교하면 결과에 매우 관심이 있습니다 ;-)).

PHP를 사용하지 않는 또 다른 접근법은 사용하는 것입니다. 이미지 magick 명령 줄을 통해 (다른 사람들이 제안한 것처럼 PHP 확장이 아닙니다)

당신은 모든 것을 통과하는 쉘 스크립트를 써야 할 것입니다. .png 파일을 제공하고 그들에게 제공합니다

  • convert 새로운 것을 창조합니다 .jpg 각각의 파일 .png 파일
  • 또는 mogrify 원본 파일에서 직접 작업하고 재정의합니다.


Sidenote로서 : 프로덕션 서버에서 직접이 작업을 수행하는 경우 전환의 무리 사이에 잠을 자고 때로는 약간 식히도록 할 수 있습니다 ^^


쉘 스크립트 +를 사용합니다 convert/mogrify 몇 번 (10 시간 동안 한 번만 달리도록), 그리고 그들은 정말로 일을 잘합니다 :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top