對於所有喜歡讓使用者用圖片填寫其個人資料而不破壞固定設計的人來說,以下應該是處理這個問題的好方法。
此檔案從 $imagepath 開啟圖片,並將其傳回為有效的圖片,以嵌入:<img src="file.php?image=123.jpg[?maxX=200&maxY=150]"> (在 [] 中 = 可選)
但是此檔案的功能不僅如此。它還會將黑色邊框新增到小於最大尺寸的檔案,因此會在影像過高的位置新增左側和右側的邊框 :-)
如果需要版權聲明,此腳本也會對您有所幫助。您可以輸入各種文字到 $copyright。文字長度應與 $maxX 和 $maxY 成比例。
好吧,該腳本還有其他功能,請嘗試一下並玩得開心 :-)
再見
<?php
if(!isset($maxX)) $maxX = 100;
if(!isset($maxY)) $maxY = 75;
$picBG = "0,0,0"; $picFG = "104,104,104"; $copyright = "stefan bechtold";
$font = 1;
$minZoom = 1; $maxZoom = 200; $imgpath = "userimages/"; $nopicurl = "../images/nopic.jpg"; $nofileurl = "../images/nofile.jpg"; if(!isset($image) || empty($image))
$imageurl = $imgpath . $nopicurl;
elseif(! file_exists($imgpath . trim($image)))
$imageurl = $imgpath . $nofileurl;
else
$imageurl = $imgpath . trim($image);
$image = getImageSize($imageurl, $info); switch($image[2]) {
case 1:
$timg = imageCreateFromGIF($imageurl);
break;
case 2:
$timg = imageCreateFromJPEG($imageurl);
break;
case 3:
$timg = imageCreateFromPNG($imageurl);
break;
}
$imgX = $image[0];
$imgY = $image[1];
$_X = $imgX/$maxX * 100;
$_Y = $imgY/$maxY * 100;
if((100-$_X) < (100-$_Y)) $_K = $_X;
else $_K = $_Y;
if($_K > 10000/$minZoom) $_K = 10000/$minZoom;
if($_K < 10000/$maxZoom) $_K = 10000/$maxZoom;
$newX = $imgX/$_K * 100;
$newY = $imgY/$_K * 100;
$posX = ($maxX-$newX) / 2;
$posY = ($maxY-$newY) / 2;
$imgh = imageCreateTrueColor($maxX, $maxY);
$cols = explode(",", $picBG);
$bgcol = imageColorallocate($imgh, trim($cols[0]), trim($cols[1]), trim($cols[2]));
$cols = explode(",", $picFG);
$fgcol = imageColorallocate($imgh, trim($cols[0]), trim($cols[1]), trim($cols[2]));
imageFill($imgh, 0, 0, $bgcol);
imageCopyResampled($imgh, $timg, $posX, $posY, 0, 0, $newX, $newY, $image[0], $image[1]);
imageStringUp($imgh, $font, $maxX-9, $maxY-3, $copyright, $fgcol);
switch($image[2]) {
case 1:
header("Content-type: image/gif");
imageGIF($imgh);
case 2:
header("Content-type: image/jpeg");
imageJPEG($imgh);
case 3:
header("Content-type: image/png");
imagePNG($imgh);
}
imageDestroy($timg);
imageDestroy($imgh);
?>