php gd: php ile resim kırpma bazı görüntülerin smushed çıkıyor

1 Cevap php

here is the website im talking about http://makeupbyarpi.com/portfolio.php

Eğer bazı görüntülerin farkedeceğiniz genişlik-bilge smushed edilir.

i kullanılan kod şudur:

$width="500";
$height="636";


 $img_src = $_FILES['galleryimg']['tmp_name'];
 $thumb = "../gallery/".rand(0,100000).".jpg";


 //Create image stream 
 $image = imagecreatefromjpeg($img_src);

 //Gather and store the width and height
 list($image_width, $image_height) = getimagesize($img_src);


 //Resample/resize the image 
 $tmp_img = imagecreatetruecolor($width, $height);
 imagecopyresampled($tmp_img, $image, 0, 0, 0, 0, $width, $height, $image_width, $image_height);

 //Attempt to save the new thumbnail 
 if(is_writeable(dirname($thumb))){
  imagejpeg($tmp_img, $thumb, 100);

 }

 //Free memory 
 imagedestroy($tmp_img);
 imagedestroy($image);

tarih olsun görüntüler bazen 3000px 2000px tarafından çok büyük ve ben php x 536 500 kırpma aşağı ve tabanlı görüntüler smushed olsun bazı manzara var. görüntü iyi çıkıyor, böylece i dikkatle kırpmak için kullanabileceğiniz bir formül var mı?

teşekkürler

1 Cevap

Yeniden boyutlandırmak ve gerekirse bir letterbox ekleyebilirsiniz. Sadece yükseklik siyah bir dikdörtgen (kapak arka plan) çizmek ve daha sonra ortalamak için gereken tercih yüksekliğine eşit değil ise (orijinal olarak aynı yükseklik oranını genişlik olduğunu varsayarak) genişliğini yeniden boyutlandırmak ve ardından yeni yüksekliğini hesaplamak gerekir görüntü.

Ayrıca Pillarbox yapabilirdi, ama sonra bu genişlik yükseklik olur ve yükseklik genişlik hale hariç yukarıdaki gibi aynı yapmak.

Edit: Aslında, sen, büyük olan birini yeniden boyutlandırmak genişliği büyükse, o yeniden boyutlandırmak ve yüksekliği daha büyük ise o zaman yeniden boyutlandırmak. Ve sen yeniden boyutlandırmak hangisinin bağlı, script gerektiği mektup veya Pillarbox ya.

EDIT 2:

<?php
    // Define image to resize	
    $img_src = $_FILES['galleryimg']['tmp_name'];
    $thumb = "../gallery/" . rand(0,100000) . ".jpg";

    // Define resize width and height
    $width = 500;
    $height = 636;

    // Open image
    $img = imagecreatefromjpeg($img_src);

    // Store image width and height
    list($img_width, $img_height) = getimagesize($img_src);

    // Create the new image
    $new_img = imagecreatetruecolor($width, $height);

    // Calculate stuff and resize image accordingly
    if (($width/$img_width) < ($height/$img_height)) {
    	$new_width = $width;
    	$new_height = ($width/$img_width) * $img_height;
    	$new_x = 0;
    	$new_y = ($height - $new_height) / 2;
    } else {
    	$new_width = ($height/$img_height) * $img_width;
    	$new_height = $height;
    	$new_x = ($width - $new_width) / 2;
    	$new_y = 0;
    }

    imagecopyresampled($new_img, $img, $new_x, $new_y, 0, 0, $new_width, $new_height, $img_width, $img_height);

    // Save thumbnail
    if (is_writeable(dirname($thumb))) {
    	imagejpeg($new_img, $thumb, 100);
    }

    // Free up resources
    imagedestroy($new_img);
    imagedestroy($img);
?>

Bir süre aldı Üzgünüm, ben 10 dakika gibi = / Bu çalışması gerekir için saptamak yapamaz hesaplama bölümünde küçük bir hata karşılaştım.