从给定的String数据中使透明像素变为白色:image / png; base64

时间:2012-10-25 14:50:04

标签: php string image transparent

我知道这可以在纯PHP中完成,但无法找到解决方案。

这是我到目前为止所做的:

<?php 

// posted canvas image data (string), such as: 
// "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArcAAAHbCAYAAADRQ7"
$data = $_POST['data'];

// remove the "data:image/png;base64," part
$uri =  substr($data,strpos($data,",")+1);

$imgData = base64_decode($uri);

// NOT WORKING: transparent to white pixels
$im = imagecreatefromstring($imgData);
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
// END NOT WORKING

// put the data to a file
file_put_contents('yourimage.png', $imgData);

// force user to download the image
if(file_exists('yourimage.png')){
    // save dialog box
    header('Content-Disposition: attachment; filename="yourimage.png"');
    // output png format
    header('Content-type: image/png');
    // read from server and write to buffer
    readfile('yourimage.png');
}


?>

首先,我试图找出PHP是否可以直接更改image / png-String并修改透明部分,但找不到任何内容。现在我尝试从发布的字符串创建一个图像,并且也失败了......

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

你写的是错误的文件,首先是:

file_put_contents('yourimage.png', $imgData);

只是写出客户端发送的原始解码图像。您正在使用GD来操作该图像,这意味着您必须让GD写出修改后的图像,例如

imagepng($im, 'yourimage.png');

但是,由于您似乎只是将该图像转发给用户,因此您可以使用以下内容删除更多代码和中间'yourimage.png'文件:

header('Content-type: image/png');
imagepng($im); // no filename specified, write data out to PHP's output buffer directly.