我有一堆高質量的PNG文件。我想使用PHP將它們轉換爲JPG,因爲它的文件尺寸較小,同時保持質量。我想在網上顯示JPG文件。使用PHP將PNG轉換爲JPG壓縮?
PHP是否有函數/庫來做到這一點?質量/壓縮質量好嗎?
我有一堆高質量的PNG文件。我想使用PHP將它們轉換爲JPG,因爲它的文件尺寸較小,同時保持質量。我想在網上顯示JPG文件。使用PHP將PNG轉換爲JPG壓縮?
PHP是否有函數/庫來做到這一點?質量/壓縮質量好嗎?
小心你想要轉換的東西。 JPG不支持alpha透明,而PNG則支持。你會失去這些信息。
要轉換,你可以使用以下功能:
// 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);
}
該函數從GD庫使用imagecreatefrompng()
和imagejpeg()
功能。
請看看danLeon的答案,以便安全地將PNG轉換爲JPG。 – Codemole 2012-08-28 02:31:55
這個答案不適用於帶有透明度的png文件。 – 2013-09-18 13:29:35
PHP有一些image processing functions以及imagecreatefrompng
和imagejpeg
function。第一個將創建一個PNG圖像文件的內部表示,而第二個用於將該表示保存爲JPEG圖像文件。
你可能想看看Image Magick,通常被認爲是事實上的圖像處理標準庫。是否需要安裝額外的PHP模塊,但不知道是否有/可用於默認安裝。
HTH。
參見this list of php image libraries。基本上它是GD或Imagemagick。
這是一個小例子,將轉換「image.png」到「image.jpg的」在70%的圖像質量:
<?php
$image = imagecreatefrompng('image.png');
imagejpeg($image, 'image.jpg', 70);
imagedestroy($image);
?>
希望幫助
我知道這是不是一個確切的回答OP,但作爲答案已經給出...
你真的需要在PHP中做到這一點?
我的意思是:如果你需要轉換大量的圖片,在PHP做它可能不是最好的辦法:你會面臨一場memory_limit
,max_execution_time
...
我也想說GD可能無法爲您帶來最佳質量/尺寸比例;但不知道這一點(如果你GD和其他解決方案之間的比較,我對結果;-)很感興趣)
另一種方法,不使用PHP,是通過命令行使用Image Magick (而不是作爲一個PHP擴展像其他人建議)
你必須寫一個shell腳本,通過所有.png
文件去,並讓他們要麼
一點題外話:如果您在生產服務器上直接這樣做,你可以把轉換的束之間的一些睡眠時間,讓它冷靜下來有時^^
我已經使用+ convert
/mogrify
幾次(有他們這樣的事情10小時一次運行) shell腳本,他們做的工作非常好:-)
<?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 =要製作縮略圖的文件的文件名。 $ thumbpath =要將縮略圖保存到的目錄的路徑。 $ maxwidth = PX中縮略圖的最大寬度,例如。 100(這將是100px)。
createThumbnail($path, $name, $thumbpath, $maxwidth);
我用這個,它工作得很好,謝謝! – user1053263 2012-03-17 04:20:51
這樣做是爲了安全的一個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文件大小小,所以請確保您使用的是正確的文件。 http://lbrandy.com/blog/2008/10/my-first-and-last-webcomic/ – jimyi 2009-07-29 17:27:05