2014-12-20 2 views
-1

내 웹 사이트의 사진 갤러리를 만들고 있습니다. 이것은 미니어처 그리드 (400 x 300px)입니다. 사용자가 미니탭을 클릭하면 이미지가 전체 크기로 나타납니다. 사용자가 이미지를 업로드 할 수는 있지만 문제는 크기가 400 x 300px 인 소형 이미지를 업로드하기 위해 올린 이미지를 자르기 및/또는 크기 조정하는 방법에 비례하여을 유지하는 것입니다.이미지를 자르고 크기를 자동으로 특정 크기로 조정

+0

중복 가능성 (http://stackoverflow.com/questions/14096065/php-resize-image-proportionally-to-a-bigger-size) – waki

+0

# justgoogleit ... – quickshiftin

+0

http://stackoverflow.com/questions/6440113/proportional-image-resizing – chrki

답변

4

내 프로젝트에서이 작업을 수행했습니다. 모든 작업을 테스트하지 않아도됩니다. 이렇게하면 더 나은 해결책을 찾을 수 있습니다.

// RESIZE AN IMAGE PROPORTIONALLY AND CROP TO THE CENTER 


function resize_and_crop($original_image_url, $thumb_image_url, $thumb_w, $thumb_h, $quality=75) 
{ 
    // ACQUIRE THE ORIGINAL IMAGE: http://php.net/manual/en/function.imagecreatefromjpeg.php 
    $original = imagecreatefromjpeg($original_image_url); 
    if (!$original) return FALSE; 

    // GET ORIGINAL IMAGE DIMENSIONS 
    list($original_w, $original_h) = getimagesize($original_image_url); 

    // RESIZE IMAGE AND PRESERVE PROPORTIONS 
    $thumb_w_resize = $thumb_w; 
    $thumb_h_resize = $thumb_h; 
    if ($original_w > $original_h) 
    { 
     $thumb_h_ratio = $thumb_h/$original_h; 
     $thumb_w_resize = (int)round($original_w * $thumb_h_ratio); 
    } 
    else 
    { 
     $thumb_w_ratio = $thumb_w/$original_w; 
     $thumb_h_resize = (int)round($original_h * $thumb_w_ratio); 
    } 
    if ($thumb_w_resize < $thumb_w) 
    { 
     $thumb_h_ratio = $thumb_w/$thumb_w_resize; 
     $thumb_h_resize = (int)round($thumb_h * $thumb_h_ratio); 
     $thumb_w_resize = $thumb_w; 
    } 

    // CREATE THE PROPORTIONAL IMAGE RESOURCE 
    $thumb = imagecreatetruecolor($thumb_w_resize, $thumb_h_resize); 
    if (!imagecopyresampled($thumb, $original, 0,0,0,0, $thumb_w_resize, $thumb_h_resize, $original_w, $original_h)) return FALSE; 

    // ACTIVATE THIS TO STORE THE INTERMEDIATE IMAGE 
    // imagejpeg($thumb, 'RAY_temp_' . $thumb_w_resize . 'x' . $thumb_h_resize . '.jpg', 100); 

    // CREATE THE CENTERED CROPPED IMAGE TO THE SPECIFIED DIMENSIONS 
    $final = imagecreatetruecolor($thumb_w, $thumb_h); 

    $thumb_w_offset = 0; 
    $thumb_h_offset = 0; 
    if ($thumb_w < $thumb_w_resize) 
    { 
     $thumb_w_offset = (int)round(($thumb_w_resize - $thumb_w)/2); 
    } 
    else 
    { 
     $thumb_h_offset = (int)round(($thumb_h_resize - $thumb_h)/2); 
    } 

    if (!imagecopy($final, $thumb, 0,0, $thumb_w_offset, $thumb_h_offset, $thumb_w_resize, $thumb_h_resize)) return FALSE; 

    // STORE THE FINAL IMAGE - WILL OVERWRITE $thumb_image_url 
    if (!imagejpeg($final, $thumb_image_url, $quality)) return FALSE; 
    return TRUE; 
} 


// USE CASE 
echo '<a target="_blank" href="orig_600x374.jpg">Original 600x374</a><br/>'; 

resize_and_crop('orig_600x374.jpg', 'temp_100x100.jpg', 100, 100); 
echo '<a target="_blank" href="temp_100x100.jpg">100x100</a><br/>'; 

resize_and_crop('orig_600x374.jpg', 'temp_200x100.jpg', 200, 100); 
echo '<a target="_blank" href="temp_200x100.jpg">200x100</a><br/>'; 

resize_and_crop('orig_600x374.jpg', 'temp_200x300.jpg', 200, 300); 
echo '<a target="_blank" href="temp_200x300.jpg">200x300</a><br/>'; 
[비례하여 더 큰 크기의 치수 PHP 화상]의
+0

안녕하세요, 저는이 솔루션을 시도했지만 상단과 하단에서 이미지를 자르지 만 오른쪽과 왼쪽면에서 이미지를자를 수는 없습니까? 이것에 대한 해결책이 있습니까? –

관련 문제