PHP Resim Crop
Yüklediğimiz resimler için thumbnail oluşturma, bazen ciddi derecede can sıkıcı olabiliyor. Dikdörtgen şekle sahip olan bir resmi kare şeklinde yeniden boyutlandırdığımız vakit resim görüntüsünde ciddi bir kayma meydana geliyor veya mantıklı olarak yeniden boyutlandırma yaptığımızda, küçülttüğümüz resimleri sıralarken kötü bir görünüme sahip olabiliyor. Böyle durumlarda resmi mantıklı bir şekilde kırparak istediğimiz boyutlara getirmek iyi bir çözüm oluyor.
Nette dolaşırken geçmiş zaman içerisinde bulmuş olduğum ve kaynağını hatırlayamadığımdan dolayı kaynak gösteremeyeceğim, kendi kullandığım image crop fonksiyonunu paylaşmak istedim. Benim çok işime yaradı, umarım sizin de işinize yarar.
<?PHP
function crop($kaynak,$hedef)
{
define( 'DESIRED_IMAGE_WIDTH', 100 ); //yeniden boyutlandirmak istedigimiz genislik
define( 'DESIRED_IMAGE_HEIGHT', 100 ); //yeniden boyutlandirmak istedigimiz yukseklik
$source_path = $kaynak;
list( $source_width, $source_height, $source_type ) = getimagesize( $source_path );
switch ( $source_type )
{
case IMAGETYPE_GIF:
$source_gdim = imagecreatefromgif( $source_path );
break;
case IMAGETYPE_JPEG:
$source_gdim = imagecreatefromjpeg( $source_path );
break;
case IMAGETYPE_PNG:
$source_gdim = imagecreatefrompng( $source_path );
break;
}
$source_aspect_ratio = $source_width / $source_height;
$desired_aspect_ratio = DESIRED_IMAGE_WIDTH / DESIRED_IMAGE_HEIGHT;
if ( $source_aspect_ratio > $desired_aspect_ratio )
{
$temp_height = DESIRED_IMAGE_HEIGHT;
$temp_width = ( int ) ( DESIRED_IMAGE_HEIGHT * $source_aspect_ratio );
}
else
{
$temp_width = DESIRED_IMAGE_WIDTH;
$temp_height = ( int ) ( DESIRED_IMAGE_WIDTH / $source_aspect_ratio );
}
$temp_gdim = imagecreatetruecolor( $temp_width, $temp_height );
imagecopyresampled(
$temp_gdim,
$source_gdim,
0, 0,
0, 0,
$temp_width, $temp_height,
$source_width, $source_height
);
$x0 = ( $temp_width - DESIRED_IMAGE_WIDTH ) / 2;
$y0 = ( $temp_height - DESIRED_IMAGE_HEIGHT ) / 2;
$desired_gdim = imagecreatetruecolor( DESIRED_IMAGE_WIDTH, DESIRED_IMAGE_HEIGHT );
imagecopy(
$desired_gdim,
$temp_gdim,
0, 0,
$x0, $y0,
DESIRED_IMAGE_WIDTH, DESIRED_IMAGE_HEIGHT
);
header( 'Content-type: image/jpeg' );
imagejpeg($desired_gdim,$hedef);
imagedestroy($desired_gdim);
}
?>
Resim Crop Fonksiyonu Kullanımı:
//formdan gelen bilgileri aliyoruz. $resim = $_FILES['resim_field']['tmp_name']; $resim_isim = $_FILES['resim_field']['name']; $klasor = 'uploads/'; crop($resim,$klasor.$resim_isim);