PHP 裁剪 DataURL 和 return DataURL

PHP Crop DataURL and return DataURL


我正在尝试制作一个 PHP 脚本来裁剪一个 dataURL 和 return 另一个 dataURL,使用 GD 库,但我总是出错,我该如何解决?

if(isset($_GET['render'])) {
    if((isset($_GET['render_x'])) && (isset($_GET['render_y']))) {
        if(isset($_GET['dataURL'])) {
            $image = $_GET['dataURL']; // the image to crop
            $image = substr($image,22);
            $img = imagecreatetruecolor('200','150');
            $org_img = imagecreatefromstring(base64_decode($image));
            imagecopy($img,$org_img, 0, 0, 20, 20, 200, 150);
            ob_start(); 
            imagepng($img);
            $image_data = ob_get_contents(); 
            ob_end_clean (); 
            $image_data_base64 = base64_encode($image_data);
            imagedestroy($img);
            echo '<img src="data:image/png;base64,'.$image_data_base64.'" ><p>';
        }
    }
}

我该如何解决?我收到这些错误:

Warning: imagecreatefromstring(): gd warning: one parameter to a memory allocation multiplication is negative or zero, failing operation gracefully in xxx on line 29

Warning: imagecreatefromstring(): Passed data is not in 'WBMP' format in xxx on line 29

Warning: imagecreatefromstring(): Couldn't create GD Image Stream out of Data in xxx on line 29

Warning: imagecopy() expects parameter 2 to be resource, boolean given in

和一张黑色图片
编辑:$_GET['dataURL']值:data:image/png;base64,AAAFBfj42Pj4
我该如何解决?谢谢

我认为您应该在代码中省略 substr 部分。因为图像数据(图像类型)也很重要。

您的 url 的长度也限制为每个浏览器的一定数量的字符。所以为了保存,请将其控制在 2000 个字符以下。如果那不可能。按照@tacone 在他的评论中的建议,通过 post 获取图像的内容。

if(isset($_GET['render'])) {
    if((isset($_GET['render_x'])) && (isset($_GET['render_y']))) {
        if(isset($_GET['dataURL'])) {
            $image = $_GET['dataURL']; // the image to crop
            //$image = substr($image,22);
            $img = imagecreatetruecolor('200','150');
            $org_img = imagecreatefromstring(base64_decode($image));
            imagecopy($img,$org_img, 0, 0, 20, 20, 200, 150);
            ob_start(); 
            imagepng($img);
            $image_data = ob_get_contents(); 
            ob_end_clean (); 
            $image_data_base64 = base64_encode($image_data);
            imagedestroy($img);
            echo '<img src="data:image/png;base64,'.$image_data_base64.'" ><p>';
        }
    }
}