imagecreatefrompng () yerine şeffaf bir siyah arka plan yapar?

5 Cevap php

Ben bir düz siyah renk içine PHP ve GD kütüphanesi ama benim kod sıram png saydamlığı kullanarak küçük yapmak, benim kod geliştirmek için bir çözüm var mı?

Bu benim php küçük yapımcısı kodu:

function cropImage($nw, $nh, $source, $stype, $dest) {
     $size = getimagesize($source);
     $w = $size[0];
      $h = $size[1];

      switch($stype) {
          case 'gif':
          $simg = imagecreatefromgif($source);
          break;
          case 'jpg':
          $simg = imagecreatefromjpeg($source);
          break;
          case 'png':
          $simg = imagecreatefrompng($source);
          break;
      }

      $dimg = imagecreatetruecolor($nw, $nh);
      $wm = $w/$nw;
      $hm = $h/$nh;
      $h_height = $nh/2;
      $w_height = $nw/2;

      if($w> $h) {
          $adjusted_width = $w / $hm;
          $half_width = $adjusted_width / 2;
          $int_width = $half_width - $w_height;
          imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
      } elseif(($w <$h) || ($w == $h)) {
          $adjusted_height = $h / $wm;
          $half_height = $adjusted_height / 2;
          $int_height = $half_height - $h_height;

          imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
      } else {
          imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
      }

      imagejpeg($dimg,$dest,100);
}

Teşekkür ederim

5 Cevap

Imagecreatetruecolor () sonra:

<?php
switch ($stype)
{
    case "png":
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($simage, 0, 0, 0);
        // removing the black from the placeholder
        imagecolortransparent($simage, $background);

        // turning off alpha blending (to ensure alpha channel information 
        // is preserved, rather than removed (blending with the rest of the 
        // image in the form of black))
        imagealphablending($simage, false);

        // turning on alpha channel information saving (to ensure the full range 
        // of transparency is preserved)
        imagesavealpha($simage, true);

        break;
    case "gif":
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($simage, 0, 0, 0);
        // removing the black from the placeholder
        imagecolortransparent($simage, $background);

        break;
}
?>

. Jpg görüntü (bunu göremiyorum) içindeki küçük hatalar var ise Bazen, tüm saydam pikseller kullanmak için siyah color.Try dönüp:

ini_set('gd.jpeg_ignore_warning', 1);

Operasyonlarının sırası önemlidir. için. gif görüntüleri i siyah arka şeffaf olarak atamak sonra, ilk boyutlandırılan görüntü kopyalamak için gerekli bulundu. PNG ben boyutlandýrýlmýþ görüntüler aşağıdaki kodu bulundu ve şeffaflık arka tuttu.

Ayrıca, bu kod benim için çalıştı ...

$resized_image = imagecreatetruecolor($target_width, $target_height);
switch ( $asset->a_mime_type )
{
    case 'image/jpeg':
        imagecopyresampled($resized_image, $source, 0, 0, 0, 0, $target_width, $target_height, $asset->a_image_width, $asset->a_image_height);
        $r = imagejpeg($resized_image,$file_name);
        break;
    case 'image/png':
        imagealphablending($resized_image, FALSE);
        imagesavealpha($resized_image, TRUE);
        imagecopyresampled($resized_image, $source, 0, 0, 0, 0, $target_width, $target_height, $asset->a_image_width, $asset->a_image_height);
        $r = @imagepng($resized_image,$file_name);
        break;
    case 'image/gif':
        imagecopyresampled($resized_image, $source, 0, 0, 0, 0, $target_width, $target_height, $asset->a_image_width, $asset->a_image_height);
        $background = imagecolorallocate($resized_image, 0, 0, 0); 
        imagecolortransparent($resized_image, $background);
        $r = @imagegif($resized_image,$file_name);
        break;
}

255 RGB değiştirmek, sonra yerine siyah, size şeffaf bir görüntü verecektir.

<?php
switch ($stype)
{
    case "png":
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($simage, 255, 255, 255);
        // removing the black from the placeholder
        imagecolortransparent($simage, $background);

        // turning off alpha blending (to ensure alpha channel information is preserved, rather than removed (blending with the rest of the image in the form of black))
        imagealphablending($simage, false);

        // turning on alpha channel information saving (to ensure the full range of transparency is preserved)
        imagesavealpha($simage, true);

        break;
    case "gif":
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($simage,  255, 255, 255);
        // removing the black from the placeholder
        imagecolortransparent($simage, $background);

        break;
}
?>

Doğru cevap kod işe yaramazsa bu deneyin:

    //After imagecreatetruecolor():
$white = imagecolorallocate($dimg, 255, 255, 255); 
imagefill($dimg,0,0,$white);