Fabric.js canvas.toDataURL()由Ajax发送到PHP
Fabric.js canvas.toDataURL() sent to PHP by Ajax
当我需要创建一个具有透明背景的图像时,我遇到了一个问题。我仍然不知道问题是fabricjs还是php。当我发送彩色背景的图像时,一切都很好。当我发送具有透明背景的图像时,就会出现问题。生成的图像以黑色背景创建。所以,让我更好地解释一下:当用户点击保存按钮时,我将画布的字符串表示发送到服务器端的php,以生成画布的图像。因此,我使用以下函数通过Ajax发送画布的字符串表示(jQuery的POST函数):
函数sendStringRepresentation(){var strDataURI=canvas.toDataURL();strDataURI=strDataURI.substr(22,strDataURI.length);$.post("action/createImage.php",{str:strDataURI},函数(数据){if(data="OK"){$("#msg").html("图像已创建。");}其他{$("#msg").html("未创建图像。");}});}
在PHP文件中,我使用以下代码生成图像:
//createImage.php$data=base64_decode($_POST["str"]);$urlUploadImages="../uploads/img/";$nameImage="test.png";$img=imagecreatefromstring($data);if($img){imagepng($img,$urlUploadImages.$nameImage,0);imagedestroy($img);//[数据库代码]echo"OK";}其他{echo"ERROR";}
同样,问题只是背景透明画布。有了彩色背景,一切都很好。
最后一步完全相反:
imagecopyresampled( $img, $alpha_image, 0, 0, 0, 0, $w, $h, $w, $h );
瞧!图像是透明的!
为什么要使用GD?您可以使用file_put_contents从画布中保存png文件。
//createImage.php
$data = base64_decode($_POST["str"]);
$urlUploadImages = "../uploads/img/test.png";
file_put_contents($urlUploadImages, $data);
我不知道这是否正是您遇到的问题,但GD库的一些imagecreate*
函数创建的图像没有alpha通道。
我找到的解决方法是使用imagecreatetruecolor
创建一个图像,并将透明图像复制到上面
尝试这样的过程:
$img = imagecreatefromstring($data);
$w = imagesx($img);
$h = imagesy($img);
$alpha_image = imagecreatetruecolor( $w, $h );
imagecopyresampled( $alpha_image, $img, 0, 0, 0, 0, $w, $h, $w, $h );
这应该确保您最终得到一个具有正确alpha通道的"真彩色"图像。
JPG-toDataURL将透明背景转换为黑色。
我遇到了完全相同的问题,并添加了这个
imageAlphaBlending($img,true)
imageSaveAlpha($img,true)
到罗德里戈潘迪尼的代码,它现在工作得很完美。:)
// createImage.php
$data = base64_decode($_POST["str"]);
$urlUploadImages = "../uploads/img/";
$nameImage = "test.png";
$img = imagecreatefromstring($data);
imageAlphaBlending($img, true);
imageSaveAlpha($img, true);
if($img) {
imagepng($img, $urlUploadImages.$nameImage, 0);
imagedestroy($img);
// [database code]
echo "OK";
}
else {
echo 'ERROR';
}
相关文章:
- 将数据保存到数据库(ajax/php)后,使文本字段变灰/禁用
- 如何从ajax php中获取值(can'tget)
- Ajax/Php得到一个以上的结果
- JQuery Ajax PHP中的错误和成功处理
- 通过AJAX/PHP将数据发送到点击的url
- AJAX PHP评论框userid=0?回复=“&”;
- 如何通过ajax php将图像上传到服务器本地目录,其中html表单haven't任何传统的提交按钮
- 远程javascript ajax php攻击
- 从复选框 ajax php javascript 中检索值
- AJAX PHP 连接将行插入数据库
- 我的 Ajax php 代码无法正常工作
- Ajax-PhP communication
- 通过Ajax PHP从Javascript onClick更新数据库
- Ajax/php创建了一个数组——如何以.txt的形式下载给用户
- 检查从ajax/php返回的数据
- 使用AJAX/PHP让HTML按钮将数据插入MySQL数据库
- JQuery $.ajax + php - not run
- 联系表单Javascript/Ajax/PHP不是't工作
- ajax/php注释系统不工作
- jQuery倒计时-应用于通过AJAX/PHP加载的新元素