将.jpg,.jpeg或.gif转换为.png而不将其保存在计算机上

时间:2013-04-10 12:22:30

标签: php image png gd transform

是否可以在不将图像保存到计算机中的情况下将.jpg,.jpeg或.gif图像转换为php中的.png? 类似的东西:

function read_image($filename, $extension) {
    switch($extension) {
        case '.png':
            $image = imagecreatefrompng($filename);
            break;
        case '.jpg': case '.jpeg':
            $unTransformed = imagecreatefromjpeg($filename);
            $image = transform($unTransformed);
            break;
        case '.gif':
            $unTransformed = imagecreatefromgif($filename);
            $image = transform($unTransformed);
            break;
        return $image;
    }
}
function transform($unTransformed) {

    // Some magic here without actually saving the image to your machine when transforming

    return $transformed;
}

老实说,我找不到答案。另请注意,GD是强制性的。

2 个答案:

答案 0 :(得分:4)

使用输出缓冲和捕获imagepng的输出应该可以工作,如下所示:

function transform($unTransformed) {
    ob_start();
    imagepng($unTransformed);
    $transformed = ob_get_clean();
    return $transformed;
}

当然,这假设你实际上想要一个包含图像文件的png字节流的变量。如果唯一的目的是输出它,不要打扰并按照Marty McVry的建议去做。

答案 1 :(得分:2)

直接来自PHP手册:(imagepng() - 函数,它将PNG图像输出到浏览器或文件中)

header('Content-Type: image/png');
$transformed = imagepng($untransformed);

您可能会在发送标题时遇到问题,因此可能需要在其他位置输出标题或将imagepng创建的流转换为base64字符串并显示图像,具体取决于其他你的代码。