上传imagecreatefrompng到服务器
问题描述:
我想上传一个从Java创建的toDataURL图像,用JavaScript自动提交表单提交,由PHP捕获并使用imagecreatefrompng()
转换并分配给一个变量。上传imagecreatefrompng到服务器
这里是开始的代码:
Javascript代码:
if(getImageData == true){
console.log("Saving avatar as image...");
window.setTimeout(function() {
imgData = renderer.domElement.toDataURL("image/png");
document.getElementById('avatarimg').src = imgData;
document.getElementById("timg").value = imgData;
console.log(imgData);
document.getElementById("form1").submit();
console.log("Avatar saved as PNG img.");
}, 300);
getImageData = false;
PHP代码:
if($_POST['timg']){
$renderedav = imagecreatefrompng($_POST['timg']);
imageAlphaBlending($renderedav, true);
imageSaveAlpha($renderedav, true);
$target = "images/Avatars/";
$newname = md5($_POST['timg']);
echo ("<font color='#000000'>Image rendered. - " . $newname . " </font>");
$target = $target . $newname . ".png";
if(move_uploaded_file($renderedav, $target))
{ echo("File uploaded."); }else{echo("Error uploading file.");}
}
当我使用显示图像作为原料IMG imgData
,一切看起来不错,但我想创建一个实际的图像m数据并使用在$newname
中创建的名称将其上传到我的数据库中的目录。这可能吗?我正确地进行了吗?我知道move_uploaded_file()
是为了将一个暂停的文件从一个文件表单元素移动到一个新位置,但在我的研究中,我找不到另一种方法来做到这一点。
答
这里有一对夫妇的事情,是行不通的:
- 无法通过回一些HTML编写过顶的文字,你必须使用一个
gdlib
文本功能类似imagettftext()
。一个注意,你必须指向一个字体文件来使用它(Resource here)。如果你没有试图在图像上面写这个echo ("<font color='#000000'>Image rendered. - " . $newname . " </font>");
,忽略脚本的这部分,但你仍然不能这样做,因为如果你回应任何东西(或者在你的脚本之前有空的空间),它会破坏图像。 - 您必须使用
imagepng()
(Resource here)来保存文件。
PHP脚本:
if($_POST['timg']){
// Set file path info
$target = "images/Avatars/";
$newname = md5($_POST['timg']);
$target = $target.$newname.".png";
// Start gdlib functions
$renderedav = imagecreatefrompng($_POST['timg']);
imagealphablending($renderedav, true);
imagesavealpha($renderedav, true);
$fColor_white = imagecolorallocate($renderedav, 255, 255, 255);
// Path to truetype font
$font = 'font.TTF';
// Add text to image
imagettftext($renderedav, 25, 0, 75, 300, $fColor_white, $font, "Image rendered. - ".$newname);
// Here you output the png and use the second parameter to save to a destination
imagepng($renderedav,$target);
// Now you destroy the resouce
imagedestroy($renderedav);
}
我是不是要在屏幕上书写文字,这只是一个可视化调试的事情,我试图做...但imagepng()的事情成功了!它确实将图像上传到数据库!非常感谢! –
没有问题。如果有效,请务必检查答案是否正确。这样你就不会有人认为它还没有得到答案。 – Rasclatt