4

是否可以在 php 中将 .jpg、.jpeg 或 .gif 图像转换为 .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 是强制性的。

4

2 回答 2

4

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

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

当然,这是假设您实际上想要一个包含图像文件的 png 字节流的变量。如果唯一的目的是无论如何输出它,请不要打扰并按照 Marty McVry 的建议进行操作。

于 2013-04-10T12:29:03.147 回答
2

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

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

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

于 2013-04-10T12:28:29.493 回答