将 imagecreatefrompng 上传到服务器
Upload imagecreatefrompng to server
我正在尝试上传从 Java 的 toDataURL 创建的图像,使用 javascript 自动提交,由 PHP 捕获并使用 imagecreatefrompng()
转换并分配给一个变量。
这是开始的代码:
Java脚本代码:
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.");}
}
当我使用 imgData
将图像显示为原始 img 时,一切看起来都很棒,但我想从该数据创建一个实际图像并使用创建的名称将其上传到我的数据库中的目录在 $newname
。这可能吗?我做得对吗?我知道 move_uploaded_file()
旨在将挂起的文件从文件表单元素移动到新位置,但在我的研究中我找不到另一种方法可以做到这一点。
这里有几件事是行不通的:
- 您不能通过回显一些 html 来覆盖顶部的文本,您必须使用
gdlib
文本函数,例如 imagettftext()
。请注意,您必须指向一个字体文件才能使用它 (Resource here)。如果您不想在图像上方写这个 echo ("<font color='#000000'>Image rendered. - " . $newname . " </font>");
,请忽略脚本的这一部分但是,您仍然不能这样做,因为如果您回显任何内容(或在脚本之前有空 space ), 它会损坏图像。
- 您必须使用
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);
}
我正在尝试上传从 Java 的 toDataURL 创建的图像,使用 javascript 自动提交,由 PHP 捕获并使用 imagecreatefrompng()
转换并分配给一个变量。
这是开始的代码:
Java脚本代码:
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.");}
}
当我使用 imgData
将图像显示为原始 img 时,一切看起来都很棒,但我想从该数据创建一个实际图像并使用创建的名称将其上传到我的数据库中的目录在 $newname
。这可能吗?我做得对吗?我知道 move_uploaded_file()
旨在将挂起的文件从文件表单元素移动到新位置,但在我的研究中我找不到另一种方法可以做到这一点。
这里有几件事是行不通的:
- 您不能通过回显一些 html 来覆盖顶部的文本,您必须使用
gdlib
文本函数,例如imagettftext()
。请注意,您必须指向一个字体文件才能使用它 (Resource here)。如果您不想在图像上方写这个echo ("<font color='#000000'>Image rendered. - " . $newname . " </font>");
,请忽略脚本的这一部分但是,您仍然不能这样做,因为如果您回显任何内容(或在脚本之前有空 space ), 它会损坏图像。 - 您必须使用
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);
}