GD küçük jeneratör ile ilgili sorunlarınız

5 Cevap php

Ben küçük oluşturmak için PHP kullanıyorum. Sorun küçük resimler olabilir ve sık sık görüntüler gergin kez gereken bir dizi genişlik ve yüksekliğe sahip olmasıdır.

Ne istiyorum ya soldaki ve aynı oranlarda kalması görüntü ve sadece siyah dolgu (ya da herhangi bir renk) sahip doğru uzun boylu görüntü veya top & Geniş görüntüler için alt.

(Okunabilmesi için biraz dumbed): İşte ben şu anda kullanıyorum kodudur

$temp_image_file = imagecreatefromjpeg("http://www.example.com/image.jpg");

list($width,$height) = getimagesize("http://www.example.com/image.jpg");

$image_file = imagecreatetruecolor(166,103);

imagecopyresampled($image_file,$temp_image_file,0,0,0,0,166,103,$width,$height);
imagejpeg($image_file,"thumbnails/thumbnail.jpg",50);

imagedestroy($temp_image_file);
imagedestroy($image_file);

5 Cevap

Sen yeni genişliği hesaplamak gerekir & edeceğiz görüntü proportionat tutmak için yüksekliği. Bu sayfada örneği 2 göz atın:

http://us3.php.net/imagecopyresampled

Tamam çalışma var, burada yapıyor sona budur:

$filename = "http://www.example.com/image.jpg";

list($width,$height) = getimagesize($filename);

$width_ratio = 166 / $width;
if ($height * $width_ratio <= 103)
{
    $adjusted_width = 166;
    $adjusted_height = $height * $width_ratio;
}
else
{
    $height_ratio = 103 / $height;
    $adjusted_width = $width * $height_ratio;
    $adjusted_height = 103;
}

$image_p = imagecreatetruecolor(166,103);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p,$image,ceil((166 - $adjusted_width) / 2),ceil((103 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);

imagejpeg($image_p,"thumbnails/thumbnail.jpg",50);

Burada bir GD görüntü nesne, maksimum genişlik, yükseklik max, ve bu parametreler içinde rescales aldığını yazdı bir fonksiyon:

function resized($im, $mx, $my) {
  $x = $nx = imagesx($im);
  $y = $ny = imagesy($im);
  $ar = $x / $y;
  while ($nx > $mx || $ny > $my) {
    if ($nx > $mx) {
      $nx = $mx;
      $ny = $nx / $ar;
    }
    if ($ny > $my) {
      $ny = $my;
      $nx = $ny * $ar;
    }
  }
  if ($nx != $x) {
    $im2 = imagecreatetruecolor($nx, $ny);
    imagecopyresampled($im2, $im, 0, 0, 0, 0, $nx, $ny, $x, $y);
    return $im2;
  } else {
    return $im;
  }
}

Çıkan görüntü rescaling ihtiyaç yoksa o zaman sadece orijinal görüntüyü döndürür.

Bu bir göz upload class. Bu size çok daha fazla yanında istediğinizi ve ne yapar.

Bu genişlik ve yükseklik büyük bir boyuta görüntüyü yeniden ölçeklendirilir ve sonra doğru boyutuna kırpar.

// Crete an image forced to width and height
    function createFixedImage($img, $id=0, $preFix=false, $mw='100', $mh='100', $quality=90){

        // Fix path
        $filename = '../'.$img;

        // Check for file
        if(file_exists($filename))
        {           
            // Set a maximum height and width
            $width = $mw;
            $height = $mh;

            // Get new dimensions
            list($width_orig, $height_orig) = getimagesize($filename);

            $ratio_orig = $width_orig/$height_orig;

            if ($width/$height < $ratio_orig) {
                   $width = $height*$ratio_orig;
            }else{
                   $height = $width/$ratio_orig;
                }

            // Resample
            $image_p = imagecreatetruecolor($mw, $mh);
            $image = imagecreatefromjpeg($filename);
            imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

            // Output
            imagejpeg($image_p, "../images/stories/catalog/{$preFix}{$id}.jpg", $quality);
        }
    }