Küçük oluşturmak için PHP kullanın.

2 Cevap php

Ben şu anda bu bir maksimum genişlik ve yükseklik dayalı küçük oluşturur kullanarak bir php script im var. Ancak, bu her zaman kare görüntüler oluşturmak ve gerektiğinde görüntü kırpma istiyorum.

İşte şimdi kullanıyorum budur:

    function makeThumb( $filename, $type ) {
  global $max_width, $max_height;
  if ( $type == 'jpg' ) {
   $src = imagecreatefromjpeg("blocks/img/gallery/" . $filename);
  } else if ( $type == 'png' ) {
   $src = imagecreatefrompng("blocks/img/gallery/" . $filename);
  } else if ( $type == 'gif' ) {
   $src = imagecreatefromgif("blocks/img/gallery/" . $filename);
  }
  if ( ($oldW = imagesx($src)) < ($oldH = imagesy($src)) ) {
   $newW = $oldW * ($max_width / $oldH);
   $newH = $max_height;
  } else {
   $newW = $max_width;
   $newH = $oldH * ($max_height / $oldW);
  }
  $new = imagecreatetruecolor($newW, $newH);
  imagecopyresampled($new, $src, 0, 0, 0, 0, $newW, $newH, $oldW, $oldH);
  if ( $type == 'jpg' ) {
   imagejpeg($new, 'blocks/img/gallery/thumbs/'.$filename);
  } else if ( $type == 'png' ) {
   imagepng($new, 'blocks/img/gallery/thumbs/'.$filename);
  } else if ( $type == 'gif' ) {
   imagegif($new, 'blocks/img/gallery/thumbs/'.$filename);
  }
  imagedestroy($new);
  imagedestroy($src);
 }

Nasıl bu ben (Kare başparmak) istediklerini gerçekleştirmek için değiştirmek istiyorsunuz?

Şimdiden teşekkürler.

2 Cevap

Bir yeni örnek orantılı kalır böylece yerine yeni bir genişlik / yükseklik daha ofset, ardından yeni görüntü oluştururken ofset kullanmak ve bir kare kırpmak edeceğiz böylece o sabit genişlik / yükseklik vermek çalışmak istiyorum. 100x100 başparmak (not: denenmemiş) yapacak hızlı bir örnek,

// Get dimensions of the src image.
list($oldW, $oldH) = getimagesize($filename);

// Work out what offset to use
if ($oldH < $oldW) 
{
    $offH = 0;
    $offW = ($oldW-$oldH)/2;
    $oldW = $oldH;
} 
elseif ($oldH > $oldW) 
{
    $offW = 0;
    $offH = ($oldH-$oldW)/2;
    $oldH = $oldW;
} 
else 
{
    $offW = 0;
    $offH = 0;
}                

// Resample the image into the new dimensions.
$new = imagecreatetruecolor(100, 100);
imagecopyresampled($new, $src, 0, 0, $offW, $offH, 100, 100, $oldW, $oldH);
   /* Calculate the New Image Dimensions */
   $limiting_dim = 0;
    if( $oldH > $oldW ){
     /* Portrait */
      $limiting_dim = $oldW;
    }else{
     /* Landscape */
      $limiting_dim = $oldH;
    }
   /* Create the New Image */
    $new = imagecreatetruecolor( $thumbSize , $thumbSize );
   /* Transcribe the Source Image into the New (Square) Image */
    imagecopyresampled( $new , $src , 0 , 0 , ($oldW-$limiting_dim )/2 , ( $oldH-$limiting_dim )/2 , $thumbSize , $thumbSize , $limiting_dim , $limiting_dim );

Ben kabul edilen yanıt (Lucanos ') yorumlamak için yeterli karmaya yok ama ben yukarıdaki cevabı minik tarafta siyah çubuklar verdi bulundu.

(Kabul edilen yanıt ile birlikte) Bu kod parçacığı sınırları dışına gidiyor ve siyah çubuklar üretmeden src görüntünün ilgili bölümleri kopyalamak gerekir. Küçük hala özgün soru olarak başına kare.