高品質のPNGファイルがたくさんあります。 PHPを使用して、品質を維持しながらファイルサイズを小さくするために、それらをJPGに変換します。JPGファイルをWeb上に表示したいと思います。
PHPにはこれを行う関数/ライブラリがありますか?品質/圧縮は良いですか?
これを行うと、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);
変換するものに注意してください。 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()
関数を使用します。
これは、70%の画像品質で「image.png」を「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 =サムネイルを作成するファイルのファイル名。 $ thumbpath =サムネイルを保存するディレクトリへのパス。 $ maxwidth = PXのサムネイルの最大幅。 100(100pxになります)。
createThumbnail($path, $name, $thumbpath, $maxwidth);
Image Magick を調べてください。通常は、画像処理の事実上の標準ライブラリと見なされます。ただし、追加のphpモジュールをインストールする必要がありますが、デフォルトのインストールで使用できるものがあるかどうかはわかりません。
HTH。
PHPには、 imagecreatefrompng
および imagejpeg
function とともに、いくつかの 画像処理関数 があります。 1つ目はPNG画像ファイルの内部表現を作成し、2つ目はその表現をJPEG画像ファイルとして保存するために使用されます。
このPHPイメージライブラリのリスト を参照してください。基本的にはGdまたはImagemagickです。
私はそれがOPに対する正確な答えではないことを知っていますが、答えはすでに与えられているので...
PHPでこれを本当に行う必要がありますか?
つまり、たくさんの画像を変換する必要がある場合、PHPが最善の方法ではないかもしれません。memory_limit
、max_execution_time
、 ...
また、Gdはあなたに最高の品質/サイズ比を与えないかもしれないと言うでしょう。しかし、それについてはわかりません(Gdと他のソリューションを比較する場合、結果に非常に興味があります;-))
PHPを使用しない別のアプローチは、コマンドラインで Image Magick を使用することです(PHP他の人が提案した)
すべての.png
ファイルを通過するシェルスクリプトを作成し、それらを次のいずれかに渡す必要があります。
注:実稼働サーバーでこれを直接行う場合は、変換の束の間にスリープ時間を入れて、時々少し冷やすことができます^^
シェルスクリプト+ convert
/mogrify
を数回使用しました(1回10時間程度実行する) 、そして彼らは本当にうまく仕事をしている:-)