PHP: Gri içine png bulunuyor ve gif bulunuyor dönüştürme

2 Cevap php

im using the following script to convert jpgs into grayscale-images. http://bubble.ro/How_to_convert_an_image_to_grayscale_using_PHP.html

ben de gri tonlu görüntü içine (şeffaflık) pngs ve (şeffaflık) gif dönüştürmek için yükseltmek istiyorum.

Şu anda işe yaramıyor. Ben onun dosya uzantısı için görüntü-src sorgulama ediyorum. Eğer jpg, eğer, gif, ya da eğer ben uygun imagecreatefrom-jpg-gif-png diyoruz png

Ne yazık ki sadece gri dikdörtgen olsun için döngü ve videoları Ancak ben her zaman aynı koşuyorum, her piksel gri. Png neredeyse iş, ancak PNG yılında transprency siyah dönüştürülmüş olur.

Herhangi bir fikir?

2 Cevap

Doğru fotoğraflar elde etmek için siyah arka plan olmadan strateji izlemelisiniz:

first create your new image item set it's alphablending to false set it's savealpha to true fil it with transparent rectangle copy your grayed picture over it

kodunuzu buna benzer olacaktır:

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

goodluck!


benim balda pomoshnik bir göz atın

teşekkür ederim!

imagefilter ($ img IMG_FILTER_GRAYSCALE);

neredeyse çalışıyor. Ben hala transprency ile ilgili sorunlar yaşıyorum. şeffaf arka plan ile pngs siyah (arka plan siyah) dönüştürülmüştür olsun. Aynı videoları ve transprency ile dahası videoları düzgün grayscaled alamadım olur. Birkaç çok graytoned renkleri ancak o soluk greentones ve redtones vardır, vardır.

<?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 {
}

?>