Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在imagepng或同等文件中使用的任何类型的PHP imagecopy_Php_Image_Image Processing - Fatal编程技术网

在imagepng或同等文件中使用的任何类型的PHP imagecopy

在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

我有一个网站,用户可以上传他们选择的图片作为他们的个人资料图片

这个档案图片可以上传为.gif、.png、.jpg等,你知道,标准

然后我有一个函数,应该生成一个“海报”,其中包含所有这些用户配置文件图像

我的代码如下所示:

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,或者反之亦然,让它上传呢?我的海报不会因为不是正确的文件类型而为此人的图像生成黑色图像吗

我将非常感谢您的帮助。也许我可以使用另一个函数,或者在I
imagecopy
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