我正致力于改进我的一个Facebook应用程序,允许用户上传图像并应用样式化边框或框架(即云,星星,天空等)。用户还可以在应用后使用边框保存图像。这解释了我需要的更好一点:
http://zbrowntechnology.info/ImgDisp/imgdisp.php
如果您有任何其他问题或需要更多详情,请告知我们......我将修改此帖子。
答案 0 :(得分:3)
使用imagecopy()。该页面上的示例是使用带有imagecopymerge()的透明度选项完成的,但我认为您不需要。
使用imagecopy(),您将指定用于定位的X / Y坐标:
imagecopy( $borderimage, $topimage, 20, 20, 0, 0, $width, $height);
$width
和$height
将是顶部图片的整个宽度和高度。您需要将20
和20
替换为边框图像将在边框周围显示多少的度量。您可能需要将顶部图像调整为所需的精确尺寸,否则它可能会与边框重叠到右边或底部。 (见imagecopyresampled())
编辑:
以下是执行整个过程的粗略方法(假设chosenborder.png
是他们选择的边框,uploadedimage.png
是他们上传的图片。如果是不同的图片类型,您将使用{{ 3}})。
$borderx = 20; // The width of our border
$border = imagecreatefrompng("chosenborder.png");
$topimage = imagecreatefrompng("uploadedimage.png");
$bordersize = getimagesize($border);
$topimagesize = getimagesize($topimage);
/* The new dimensions of topimage. $borderx*2 means we account for
the border on both left and right, top and bottom. */
$newx = $bordersize[0] - ($borderx*2);
$newy = $bordersize[1] - ($borderx*2);
imagecopyresampled( $topimage_scaled, $topimage, 0, 0, 0, 0,
$newx, $newy, $topimagesize[0], $topimagesize[1]);
/* Merge the images */
imagecopy( $border, $topimage_scaled, $borderx, $borderx,
0, 0, $width, $height);
/* Output the image */
imagepng($border, "newimage.png");
/* Free up the memory occupied by the image resources */
imagedestroy($border);
imagedestroy($topimage);
用户上传图片后,找到chosenborder.png
和uploadedimage.png
,运行上面的脚本,然后向用户显示newimage.png
,您就可以了。只需确保在临时图像资源上调用imagedestroy()
,否则会占用内存。
如果您不想将生成的图像保留在服务器上,可以省略imagepng()
的第二个参数,这将使图像信息直接作为图像发送到浏览器,在这种情况下,您我想写corresponding function。
答案 1 :(得分:0)
使用css3的客户端解决方案:
结帐css3属性border-image (不符合用边框保存img的要求)
合并2张不同图片的服务器端解决方案:
<?php
$imgFile = 'img.jpg';
$brdFile = 'brd.jpg';
$img = addBorder($imgFile,$brdFile);
outputImage($img);
function addBorder($imgFile,$brdFile)
{
$img=imagecreatefromjpeg($imgFile);
$brd=imagecreatefromjpeg($brdFile);
$imgSize = getimagesize($imgFile);
$brdSize = getimagesize($brdFile);
//NOTE: the border img MUST be bigger then the src img
$dst_x = ceil(($brdSize[0] - $imgSize[0])/2);
$dst_y = ceil(($brdSize[1] - $imgSize[1])/2);
imagecopymerge ( $brd, $img, $dst_x, $dst_y, 0, 0, $imgSize[0], $imgSize[1] ,100 );
return $brd;
}
function outputImage($img)
{
header('Content-type: image/png');
imagepng($img);
}
?>