在imagepng或同等文件中使用的任何类型的PHP imagecopy
我有一个网站,用户可以上传他们选择的图片作为他们的个人资料图片 这个档案图片可以上传为.gif、.png、.jpg等,你知道,标准 然后我有一个函数,应该生成一个“海报”,其中包含所有这些用户配置文件图像 我的代码如下所示:在imagepng或同等文件中使用的任何类型的PHP imagecopy,php,image,image-processing,Php,Image,Image Processing,我有一个网站,用户可以上传他们选择的图片作为他们的个人资料图片 这个档案图片可以上传为.gif、.png、.jpg等,你知道,标准 然后我有一个函数,应该生成一个“海报”,其中包含所有这些用户配置文件图像 我的代码如下所示: for each employee_image: $posx = get next x coordinate on poster $posy = get next y coordinate on poster $employee_image = im
for each employee_image:
$posx = get next x coordinate on poster
$posy = get next y coordinate on poster
$employee_image = imagecreatefrompng($image_path);
$size = getimagesize($employee_image);
imagecopy($poster_image, $employee_image, $posx, $posy, 0,0, $size[0], $size[1]);
imagepng($im, $poster);
在我将每个$employee_图像
复制到我的主海报图像上后,我使用完成并上传图像
imagepng($im,$poster)代码>
我遇到的问题是,如果我将另一种类型的$employee\u images
放入海报中,则此功能无法工作。例如,如果我的员工图像是jpeg格式的,则imagecopy
功能无法正确获取图像,只会生成黑色图像。我认为这是因为生成海报时,类型不匹配,因为海报是png
有人知道我怎么解决这个问题吗
我想到的一个解决方案是,我可以只要求我的用户上传一种类型的图像,比如只上传.jpg或.png。但是如果有人有一个.png,他们只是把它重命名为.jpg,或者反之亦然,让它上传呢?我的海报不会因为不是正确的文件类型而为此人的图像生成黑色图像吗
我将非常感谢您的帮助。也许我可以使用另一个函数,或者在Iimagecopy
it之前对png进行某种转换
提前感谢。我为这方面的工作编写了一个库
见:
假设你想要一张3x3的海报,每张图片的宽度为100px(假设是正方形):
这里有一个函数
function makePoster($images, $rowWidth=3, $profileWidth=100){
$rows = array();
$row = null;
$i = 0;
foreach($images as $img){
$i++;
if(empty($row)){
$row = EasyImage::Create($img)->scale($profileWidth);
}else{
$row->concat(EasyImage::Create($img)->scale($profileWidth), EasyImage::HORIZ);
}
if($i == $rowWidth){
$rows[] = $row;
$i = 0;
}
}
$poster = array_shift($rows);
foreach($rows as $row){
$poster->concat($row, EasyImage::BOTTOM);
}
return $poster;
}
$poster = makePoster($ArrayOfImagePaths);
// To send the image to the browser
echo $poster;
// To save to the server
$poster->save("path/to/save/to.png");
我为这方面的工作写了一个图书馆
见:
假设你想要一张3x3的海报,每张图片的宽度为100px(假设是正方形):
这里有一个函数
function makePoster($images, $rowWidth=3, $profileWidth=100){
$rows = array();
$row = null;
$i = 0;
foreach($images as $img){
$i++;
if(empty($row)){
$row = EasyImage::Create($img)->scale($profileWidth);
}else{
$row->concat(EasyImage::Create($img)->scale($profileWidth), EasyImage::HORIZ);
}
if($i == $rowWidth){
$rows[] = $row;
$i = 0;
}
}
$poster = array_shift($rows);
foreach($rows as $row){
$poster->concat($row, EasyImage::BOTTOM);
}
return $poster;
}
$poster = makePoster($ArrayOfImagePaths);
// To send the image to the browser
echo $poster;
// To save to the server
$poster->save("path/to/save/to.png");
您可以先获取imageType(返回数组的getimagesize()
)的第三个值,然后再获取imagecreatefromjpeg
、…fromgif
、或frompng
,您可以首先获取imageType(返回数组的getimagesize()
)的第三个值,然后再做imagecreatefromjpeg
,…fromgif
,或frompng