2011-01-09 80 views
1

的尺寸這是PHP: if more than ..px resize toPHP:一個重新縮放圖像

一個後續問題正如你可以看到它會調整,如果:

if($width > 604 && $height > 453) { 

能正常工作既是寬度和高度都很大。

但是,如果$ width超過604並且$ height小於453(例如604x300)m,那麼這將跳過調整大小過程。相反的是相同的(寬度在下,高度已經結束)。另外,如果圖片上的尺寸是500x900,並且尺寸被調整,它會變得非常難看。任何偉大的修復?

請問我該如何處理這個問題的好建議?

編輯:

$rel_difference = array('width'=>0, 'height'=>0); 

if($width > 604 || $height > 453) { 
    if($width > 604) $rel_difference['width'] = ($width-604)/604; 
    if($height > 453) $rel_difference['height'] = ($height-453)/453; 

asort($rel_difference); 

$newwidth = $width/(1+end($rel_difference)); 
$newheight = $height/(1+end($rel_difference)); 
$newwidth = round($newwidth); 
$newheight = round($newheight); 
$jpeg_quality = 90; 
$src = "images/users/status/".$org_name; 
$path_thumbs = "images/users/status/"; 
$thumb_path = $path_thumbs . '/' . $newfilename; 

switch(exif_imagetype($move_me)) { 
    case IMAGETYPE_GIF: 
     $img_r = imagecreatefromgif($src); 
    break; 
    case IMAGETYPE_JPEG: 
     $img_r = imagecreatefromjpeg($src); 
    break; 
    case IMAGETYPE_PNG: 
     $img_r = imagecreatefrompng($src); 
    break; 
    default: 
      echo "{"; 
      echo  "error: 'Not a image!'"; 
      echo "}"; 
     exit(0); 
    break; 
} 
$dst_r = ImageCreateTrueColor($newwidth, $newheight); 

imagecopyresampled($dst_r, $img_r, 0, 0, 0, 0, $newwidth , $newheight, $width, $height); 

imagejpeg($dst_r,$thumb_path,$jpeg_quality); 

unlink($move_me); 
    } 

回答

2

你可以做財產以後這樣的:

$width = 1000; 
$height = 900; 

$rel_difference = array('width'=>0, 'height'=>0); 
if($width > 604 || $height > 453) { 
    if($width > 604) $rel_difference['width'] = ($width-604)/604; 
    if($height > 453) $rel_difference['height'] = ($height-453)/453; 
} 

asort($rel_difference); 

print_r($rel_difference); 

這將輸出類似:

Array (width] => 0.65562913907285 [height] => 0.98675496688742) 

現在你知道最大最大的區別。

,這將是:

end($rel_difference); 

所以你可以使用這個值比例尺寸。

EDIT

去除不需要array_reverse

EDIT2

// now lets calculate the new dimensions based on our previous code 
// I divide the dimensions with the largest difference + 1 to get to the new dimensions 

$newwidth = $width/(1+end($rel_difference)); // 503.33333333333 
$newheight = $height/(1+end($rel_difference)); // 453 

的圖像現在比例縮放。

不知道如果不使用舍入,是否可以使用那麼多的小數位。

+0

@PeeHaa謝謝你的回答。這到底是什麼?我不明白你爲什麼分裂等等。也許你誤解了這個問題,或者你可以進一步解釋一下,謝謝! – Karem 2011-01-09 16:03:13

1

因爲你是邏輯在聲明中,都必須真實執行代碼。 你需要一個OR(||),而不是AND(& &)。

if($X > 500 || $Y > 300) { 
    resize(); 
} 
1
if($width > 604 && $height > 453) { 

是TRUE僅當兩個條件都爲真,這意味着否則爲FALSE。如果我正確地得到你的問題,那麼,如果width = 605和height = 300,那麼它是FALSE,if塊中沒有任何內容會被執行。 (PS 604不超過604)

+0

是的,我知道這一點,但隨後如果圖像是605和高度300,則高度將得到擴大到453了,我不希望這 – Karem 2011-01-09 16:04:34

1

如果你想設置一個最大高度寬度,你需要在有條件使用||而不是&&

如果您想要很好地調整圖像的大小,您需要按某種因子縮小它們,而不是僅使用常數調整它們的大小。不是每個圖像都具有相同的寬高比。