【问题标题】:Upload imagecreatefrompng to server将imagecreatefrompng上传到服务器
【发布时间】:2016-06-09 03:06:15
【问题描述】:

我正在尝试上传从 Java 的 toDataURL 创建的图像,使用 javascript 以表单自动提交,由 PHP 捕获并使用 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.");}
}

当我使用 imgData 将图像显示为原始 img 时,一切看起来都很棒,但我想从该数据创建一个实际图像并使用在 $newname 中创建的名称将其上传到我的数据库中的目录.这可能吗?我做对了吗?我知道move_uploaded_file() 旨在将暂停的文件从文件表单元素移动到新位置,但在我的研究中我找不到另一种方法。

【问题讨论】:

    标签: javascript php upload php-gd


    【解决方案1】:

    这里有几件事是行不通的:

    1. 您不能通过回显某些 html 来在顶部写入文本,您必须使用 gdlib 文本函数,例如 imagettftext()。请注意,您必须指向一个字体文件才能使用它(Resource here)。如果您不想在图像顶部写此echo ("&lt;font color='#000000'&gt;Image rendered. - " . $newname . " &lt;/font&gt;");,请忽略脚本的这一部分但是,您仍然不能这样做,因为如果您回显任何内容(或在您的脚本之前有空白区域),它会损坏图片。
    2. 您必须使用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() 的事情奏效了!它确实将图像上传到数据库!非常感谢!
    • 没有问题。如果它有效,请确保检查答案是否正确。这样一来,您就不会认为它还没有得到答复而有人来。
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 2013-06-20
    • 2017-06-22
    • 2013-12-17
    • 2014-03-21
    • 2015-07-11
    相关资源
    最近更新 更多