2009-07-29 25 views
40

私は高品質のPNGファイルの束を持っています。 PHPを使ってJPGに変換したいのですが、それはファイルのサイズを小さくして品質を維持するからです。 Web上にJPGファイルを表示したいPHPを使用してPNGを圧縮してJPGに変換しますか?

PHPにはこれを行うための関数/ライブラリがありますか?品質/圧縮は良いですか?

+6

画像の種類によっては、JPGのファイルサイズがPNGよりも小さいとは限りませんので、あなたの状況に合ったものを使用していることを確認してください。 http://lbrandy.com/blog/2008/10/my-first-and-last-webcomic/ – jimyi

答えて

56

変換する項目に注意してください。 JPGは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()機能を使用しています:変換するには

は、次の機能を使用することができます。

+9

PNGをJPGに安全に変換するためのdanLeonの回答をご覧ください。 – Codemole

+4

この回答は透過性のあるpngファイルでは機能しません。 –

4

Image Magickを調べるとよいでしょう。通常、画像処理のための事実上の標準ライブラリとみなされます。デフォルトのインストールで/が利用可能かどうかは不明ですが、追加のPHPモジュールをインストールする必要があります。

HTH。

9

これは70%の画質で「image.jpg」に「image.png」を変換する小さな例です。

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

希望

2

を助け、私はそれは正確ではないことを知っていますOPへの回答ですが、回答は既に与えられています。

本当にこれはPHPで行う必要がありますか?
は、私は何を意味している:あなたが最良の方法ではないかもしれないPHPでそれをやって、画像の多くを変換する必要がある場合:あなたはmemory_limitmax_execution_timeに直面するだろう、...

私も言いますGDはあなたに最高の品質/サイズ比を与えないかもしれません。それについてはよく分からない

別のアプローチ(あなたはGDと他のソリューションとの比較をすれば、私は結果;-)によって非常に興味があります)、PHPを使用していない、コマンドライン経由Image Magickを使用することです(そして他の人のようなPHP拡張機能が示唆されていないとして)

あなたはすべての.pngファイルを経由するシェルスクリプトを書く必要があるだろう、と彼らは

  • convertは、新しいを作成するのいずれかになりますeのファイル.jpg ach .pngファイル
  • またはmogrifyオリジナルのファイルを直接操作して上書きすることができます。追記として


:あなたは本番サーバー上で直接これをやっている場合、あなたはそれが少し時々^^


をクールダウンさせるために、変換の房の間にいくつかの睡眠時間を置くことができます私は+ convert/mogrify数回(彼らは10時間のようなもの1回実行した)シェルスクリプトを使用してきた、と彼らは

9
<?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"); 
    } 
} 
    ?> 
0 :-)本当によく仕事をします

これは非常に優れたサムネイルスクリプト=) ここに例があります:

$ path =元の画像があるフォルダへのパス。 $ name =サムネイルを作成するファイルのファイル名。 $ thumbpath =サムネイルを保存するディレクトリへのパス。 $ maxwidth = PXのサムネイルの最大幅。 100(100pxになります)。

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

+1

私はこれを使用し、それはうまくいった、ありがとう! – user1053263

120

白の透明性と安全JPGにPNGを変換するために、これを行います。

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

これはPNGをJPGに安全に変換する最も正しい方法です。この返信にtop ++の評価を追加します。 – Codemole

+1

これははるかに優れ、透明性を扱います。 2つのトップ回答がレベルペギングです! –

+1

これは間違いなく受け入れられた答えになるはずです – Scalpweb

関連する問題