如何将 .tmp 文件的内容转换为 png

How to convert contents of .tmp file to png

我有一个 PHP 脚本,如果用户上传的图像文件不是 .png 图像,它会在将其保存到服务器之前使用 Imagemagick 将其转换为 .png。但是,它只能使用 HTML 形式的 .tmp 文件,因此它必须转换 CONTENTS,同时保持 .tmp(及其文件名)不变。到目前为止,这是我的代码:

if (exif_imagetype($tmpName) != IMAGETYPE_PNG) {
    $uploadOk = 0; // don't upload later
    $im = new Imagick("$tmpName");
    $im->setImageFormat( "png" );
    file_put_contents($tmpName, '');
    file_put_contents(file_get_contents($im), $tmpName);
    if (exif_imagetype($tmpName) != IMAGETYPE_PNG) { //check again
        // try again or throw error somehow?
    } else {
        $uploadOk = 1;
    }
} else {
    $uploadOk = 1;
}

如何正确使用 Imagick 将我的临时文件的内容转换为原始(非 png)图像的 png 版本?

编辑:也可能是脚本应该可以正常工作,但问题完全不同。目前还不确定。

如果你要使用 IMAGICK 库,那么你可以使用这样的东西: ...需要解释您如何获得 .tmp 文件,我猜是通过在您的网站上使用表格...所以...

.. 获取 post 文件

// This equals to 'some/server/path/temp/filename.tmp'
$original_image = $_FILE['tmp_name'];
// Lets work on the Imagick...
$img = new Imagick($original_image);
$img->setImageBackgroundColor('white');// red, black..etc
$img = $img->flattenImages(); // Use this instead.
$img->setImageFormat('png');

$new_image_name = 'nice_image_name.png';
$img->writeImage($new_image_name);

看看是否适合你...