将水印添加到图像(Base64)并进行转换

Posted

技术标签:

【中文标题】将水印添加到图像(Base64)并进行转换【英文标题】:Add watermark to image (Base64) and convert it 【发布时间】:2016-02-23 18:29:38 【问题描述】:

我有这个 php 脚本(如下): 我使用 POST 获取 base64 字符串,而不是使用 imagecreatefromstring 函数,然后尝试添加水印并保存它。但是上传后文件在服务器上是空的。我做错了什么?

    <?php
    if($_SERVER['REQUEST_METHOD'] == "POST") 
    define('UPLOAD_DIR', 'img/');

    $base64 = base64_decode(preg_replace('#^data:image/[^;]+;base64,#', '', $_POST['string']));

    $stamp = imagecreatefrompng('img/wm.png');
    $im = imagecreatefromstring($base64);


    $marge_right = 10;
    $marge_bottom = 10;
    $sx = imagesx($stamp);
    $sy = imagesy($stamp);

    imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);


    $file = UPLOAD_DIR . uniqid() . '.png';

    imagepng($im, $file, 100);


    echo 'ok';
     else 
    echo "error";
    


?>

谁能帮我解决这个问题?

【问题讨论】:

imagepng() 接受第三个 $quality 参数,它可以是 0 - 9(所有无损,9 是最大压缩)。 100 不是一个选项。不确定这是否是错误。 哦,当然!你是对的。改变了质量,它工作正常!谢谢!! 【参考方案1】:

在之前添加此代码以检查您的图像是否已创建

$im = imagecreatefromstring($base64);
if ($im !== false) 
    header('Content-Type: image/png');
    $marge_right = 10;
    $marge_bottom = 10;
    $sx = imagesx($stamp);
    $sy = imagesy($stamp);

    imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);


    $file = UPLOAD_DIR . uniqid() . '.png';

    imagepng($im, $file, 100);
    imagedestroy($im);

else 
    echo 'An error occurred.';

//

【讨论】:

图像已创建但也是空的

以上是关于将水印添加到图像(Base64)并进行转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像转换为 Base64 字符串,并转换回图像,保存到 azure blob

将 base64 编码图像添加到 Microsoft Word 文档

如何转换图像 base64 并使用 url 从服务器上传到项目?

有没有办法在不将完整文件加载到内存的情况下将 tiff 图像转换为 Base64

将图像从base64转换为图像并保存在django的数据库中

将base64字节数组转换为图像