对于所有希望用户在填写个人资料时上传图像而不破坏固定设计的人来说,以下方法应该是一个很好的解决方法。
此文件从 $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);
?>