PHP GD - Nasıl merkezine portre görüntü kırpma benim Küçük Creator değiştirebilir?

3 Cevap php

İşte benim geçerli kod:

$image  = 'img.jpg';
$source = imagecreatefromjpeg($image);

list($origWidth, $origHeight) = getimagesize($image);

$imgH   = 75;
$imgW   = $origWidth / $origHeight * $imgH;
$thumb  = imagecreatetruecolor($imgW, $imgH);

imagecopyresampled($thumb, $source, 0, 0, 0, 0, $imgW, $imgH, $origWidth, $origHeight);

Bu çıkış 75 sabit bir piksel yüksekliğinde bir görüntü için bana izin verir. Ne yapmak istiyorsunuz 99x75 piksel sabit bir görüntü boyutu olması. Bu sığmayan Portre görüntüleri merkezden kırpılmış olacak (yani orijinal merkezi minik merkezi olmaya devam etmektedir - mantıklı eğer).

Bunu nasıl yapabilirim?

3 Cevap

Peki, saf matematik. Bir 99x75 boyutunu elde etmek istiyorsanız, ve sadece genişlikten kesmek istiyorum. Yani ilk, sen yüksekliğine uyacak şekilde yeniden boyutlandırmak. Yani ne yaptığını, ama sonra, olmak üzere genişliği kontrol etmek için, 75 yüksekliğe sığacak şekilde mi 99 için geçiş <= 75 değil ise o zaman bunu...:

if( $imgW > 75 )
{
   $diff   = $imgw - 75; // this is what's extra
   $srcX   = ceil( $diff / 2 ); // this is where your img starts from
   $imgW   = 75;
}
imagecopyresampled($thumb, $source, 0, 0, $srcX, 0, $imgW, $imgH, $origWidth, $origHeight); // notice that src X changed accordingly.

Genişliği "resize" ilk 100 sonra ve 75, size = 25 diff hesaplamak istedim Yani, 2 ile bölmek ve => 13 o Ceil, o zaman, 13 ila görüntüyü kopyalamaya başlamak için GD fonksiyonu söyle 0 yerine, ve hala 75 yüksekliğini tutun. Bu 88 => merkezini eninde genişliği 13 kopyalamak anlamına gelir.

Hope this is what you wanted. Regards, Gabriel

define( 'THUMB_WIDTH',  99 );
define( 'THUMB_HEIGHT', 75 );

$image = imagecreatefromjpeg('img.jpg');
$thumb = imagecreatetruecolor(THUMB_WIDTH, THUMB_HEIGHT);

list($image_width, $image_height) = getimagesize($image);
$x0 = ( $image_width  - THUMB_WIDTH  ) / 2;
$y0 = ( $image_height - THUMB_HEIGHT ) / 2;
imagecopy(
    $thumb,      // resource $dst_im
    $image,      // resource $src_im
    0,           // int $dst_x
    0,           // int $dst_y
    $x0,         // int $src_x
    $y0,         // int $src_y
    THUMB_WIDTH, // int $src_w
    THUMB_HEIGHT // int $src_h  
);

Bu kod kullanır imagecopy function to copy 99x75px region from the source image. Source width - 99 / 2 returns the x coordinate from which to start copying, Source height - 75 / 2 returns the y coordinate. If you are interested in generating fixed size thumbnails from arbitrary size images, have a look at this article.

(Denenmemiş)

define('THUMB_WIDTH', 99);
define('THUMB_HEIGHT', 75);

$image  = 'img.jpg';
$source = imagecreatefromjpeg($image);
$thumb  = imagecreatetruecolor(THUMB_WIDTH, THUMB_HEIGHT);

$cutX = imagesx($source) > THUMB_WIDTH;
$cutY = imagesy($source) > THUMB_HEIGHT;

$source_x = $cutX ? imagesx($source) / 2 - (THUMB_WIDTH/2) : 0;
$source_y = $cutY ? imagesx($source) / 2 - (THUMB_HEIGHT/2) : 0;
$source_width = $cutX ? THUMB_WIDTH : imagesx($source);
$source_height = $cutY ? THUMB_HEIGHT : imagesy($source);

imagecopyresampled($thumb, $source, 0, 0, $source_x, $source_y, $source_width, $source_height, THUMB_WIDTH, THUMB_HEIGHT);