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

时间:2017-06-02 23:12:22

标签: php imagemagick imagick

我有一个PHP脚本,如果用户上传的图像文件不是.png图像,它会使用Imagemagick将其转换为.png,然后再保存到服务器。但是它只能使用HTML表单中的.tmp文件,所以它必须转换内容,同时保持.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版本?

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

1 个答案:

答案 0 :(得分:0)

如果您要使用IMAGICK库,那么您可以使用以下内容: ...需要解释你如何获得.tmp文件,我想通过你网站上的一个表格...所以......

..获取帖子文件

// 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);

看看这对你有用......