PHP:グレースケールにPNGのとGIFの変換
質問
イムグレースケール画像にJPGのみを変換するには、次のスクリプトを使用して。 http://bubble.ro/How_to_convert_an_image_to_grayscale_using_PHP.htmlする
私はまた、グレースケール画像に(透明度)、PNGファイルと(透明度)GIFファイルを変換するためにそれをアップグレードしたい。
現時点では、それは働いていません。私は、そのファイル拡張子のための画像-SRCを照会しています。もしJPG、GIF、PNGファイルならば、私は適切なimagecreatefrom-JPG・GIF・PNG
を呼び出す場合しかし、私は常に、残念ながら唯一の灰色の四角形を取得し、GIFをループのために同じことを実行しているが、すべてのピクセルはグレーです。 PNG形式のほとんどの作品は、しかし、PNG画像でtransprencyは黒に変換されます。
任意のアイデア?
解決
$image = ImageCreateFromString(file_get_contents('/path/to/image.ext'));
ImageFilter($image, IMG_FILTER_GRAYSCALE);
ImageGIF($image); // or ImagePNG($image);
他のヒント
使用このここにあり http://hm2k.googlecode.com/svn/trunk/コード/ PHP /機能/ imagegray.php の
<?php
function imagegray($img) {
if (!file_exists($img)) { user_error("'$img' file was not found."); return; }
list($width, $height, $type) = getimagesize($img);
switch ($type) {
case 1:
$img = imagecreatefromgif($img);
break;
case 2:
$img = imagecreatefromjpeg($img);
break;
case 3:
default:
$img = imagecreatefrompng($img);
break;
}
imagefilter($img, IMG_FILTER_GRAYSCALE);
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
}
/*because i'm british*/
function imagegrey($img) {
return imagegray($img);
}
/*
//example usage
$i=isset($_REQUEST['i'])?$_REQUEST['i']:'';
if ($i) { imagegrey($i); }
*/
黒の背景なしで右の画像を得るために、あなたは戦略に従う必要があります
まず、あなたの新しいイメージのアイテムを作成 それがfalseにアルファブレンディングだ設定 trueに、それのsavealphaを設定 透明の長方形とそれをFIL その上、あなたの灰色画像をコピー
あなたのコードは次のようになります。
switch ($handle->file_src_name_ext) {
case 'gif':
$sourceIm = imagecreatefromgif($savepath.$handle->file_dst_name);
break;
case 'jpg':
$sourceIm = imagecreatefromjpeg($savepath.$handle->file_dst_name);
break;
case 'png':
default:
$sourceIm = imagecreatefrompng($savepath.$handle->file_dst_name);
break;
}
$iw = imagesx($sourceIm);
$ih = imagesy($sourceIm);
$im = imagecreatetruecolor($iw, $ih);
if (function_exists('imagecolorallocatealpha')) {
imagealphablending($im, false);
imagesavealpha($im, true);
$transparent = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagefilledrectangle($im, 0, 0, $iw, $ih, $transparent);
}
if ($sourceIm ) {
imagefilter($sourceIm, IMG_FILTER_GRAYSCALE);
}
imagecopyresampled($im, $sourceIm, 0, 0, 0, 0, $iw, $ih, $iw, $ih);
switch ($handle->file_src_name_ext) {
case 'gif':
imagepng($im, $savepath.'grd'.$row->id.'.gif');
break;
case 'jpg':
imagejpeg($im, $savepath.'grd'.$row->id.'.jpg');
break;
case 'png':
default:
imagepng($im, $savepath.'grd'.$row->id.'.png');
break;
}
グッドラック!
<時間> を見てみましょうありがとうございました!
のImageFilter($ IMG、IMG_FILTER_GRAYSCALE);
それはほとんど働いています。私はまだtransprencyに問題を抱えています。透明な背景を持つPNGファイルは、(背景が黒)黒に変換します。同じことが、適切にグレイスケールませんGIFやtransprencyでしかもGIFファイルに発生します。いくつかの非常にgraytoned色がありますが、しかしそれにgreentonesとredtones淡いがあります。
<?php
$src = $_GET['src'];
$img_ext;
if (preg_match('/\.(\w{3,4})$/i', $src, $reg)) {
$img_ext = strtolower($reg[1]);
}
$source_file = $src;
if ($img_ext == "jpg" || $img_ext == "jpeg") { //jpg
$im = imagecreatefromjpeg($source_file);
} else if ($img_ext == "gif") {
$im = imagecreatefromgif($source_file); //gif
} else if ($img_ext == "png") {
$im = imagecreatefrompng($source_file); //png
} else {
}
ImageFilter($im, IMG_FILTER_GRAYSCALE);
if ($img_ext == "jpg" || $img_ext == "jpeg") { //jpg
header('Content-type: image/jpeg');
imagejpeg($im);
} else if ($img_ext == "gif") { //gif
header('Content-type: image/gif');
imagegif($im);
} else if ($img_ext == "png") { //png
header('Content-type: image/png');
imagepng($im);
} else {
}
?>