【问题标题】:How to convert contents of .tmp file to png如何将.tmp文件的内容转换为png
【发布时间】:2017-06-02 23:12:22
【问题描述】:

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

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 版本?

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

【问题讨论】:

  • 我对问题所在感到困惑。这里的代码是否有效?如果不是,它有什么作用?你希望它做什么?

标签: php imagemagick imagick


【解决方案1】:

如果你要使用 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);

看看这是否适合你...

【讨论】:

  • 对不起,我应该更具体一些。 .tmp 来自基本的 html 文件提交表单。不过这行得通,谢谢!
最近更新 更多