Sıkıştırma ile JPG PNG dönüştürmek için PHP kullanmak?

8 Cevap php

Ben yüksek kaliteli PNG dosyaları bir grup var. Çünkü kalitesini koruyarak daha küçük dosya boyutları var ve JPG onları dönüştürmek için PHP kullanmak istiyorum. Ben web üzerinde JPG dosyaları görüntülemek istiyorum.

PHP bunu işlevler / kütüphaneler var mı? Kalite / sıkıştırma herhangi bir iyi mi?

8 Cevap

Dönüştürmek istediğiniz ne dikkatli olun. PNG yapar iken JPG alfa-saydamlığı desteklemez. Siz bu bilgileri kaybedersiniz.

Dönüştürmek için, aşağıdaki işlevi kullanabilirsiniz:

// 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);
}

Bu fonksiyon, GD kitaplığından imagecreatefrompng() and the imagejpeg() işlevlerini kullanır.

Beyaz şeffaflık ile JPG güvenli bir PNG dönüştürmek için bunu yapın.

$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);

Bu% 70 görüntü kalitesi 'Görüntü.jpg' için 'image.png' dönüştürmek küçük bir örnek:

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

Umut olur

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");
}

} ?>

This is a very good thumbnail script =) Here's an example:

$path = The path to the folder where the original picture is. $name = The filename of the file you want to make a thumbnail of. $thumbpath = The path to the directory where you want the thumbnail to be saved into. $maxwidth = the maximum width of the thumbnail in PX eg. 100 (wich will be 100px).

createThumbnail ($ yol, $ isim, $ thumbpath, $ MaxWidth);

Sen Image Magick, genellikle görüntü işleme için de facto standart kütüphane dikkate içine bakmak isteyebilirsiniz. Varsayılan yükleme mevcut olduğu / varsa emin değilim, ama yüklü olması için ekstra bir php modülü gerektirir.

HTH.

Bkz this list of php image libraries. Temelde GD veya Imagemagick bulunuyor.

I know it's not an exact answer to the OP, but as answers have already be given...

Do you really need to do this in PHP ?
What I mean is : if you need to convert a lot of images, doing it in PHP might not be the best way : you'll be confronted to memory_limit, max_execution_time, ...

I would also say GD might not get you the best quality/size ratio ; but not sure about that (if you do a comparison between GD and other solutions, I am very interested by the results ;-) )

Başka bir yaklaşım, PHP kullanarak değil, komut satırından (and not as a PHP extension like other people suggested) aracılığı Image Magick kullanmak olacaktır

Hepiniz .png dosyalar geçer bir kabuk-komut dosyası yazmak zorunda, ve onlara verir ediyorum ya


As a sidenote : if you are doing this directly on your production server, you could put some sleep time between bunches of conversions, to let it cool down a bit sometimes ^^


I've use the shell script + convert/mogrify a few times (having them run for something like 10 hours one time), and they do the job really well :-)