【问题标题】:php - get data from uri imagephp - 从 uri 图像中获取数据
【发布时间】:2016-07-06 16:59:57
【问题描述】:

我正在使用 JavaScript 客户端图像上传器和编辑器,通过 URI 图像发布到服务器。

示例代码:

$_POST['image_data']="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO4AAAA6CAYAAAC........"

生成的图片很小(20kb-30kb),我直接保存到数据库而不是文件中(因为我后来也直接嵌入到了CSS中)。

如何在将发布的数据添加到数据库之前验证发布的数据以使其大小和尺寸不会太大?我还需要检查数据 URI,以便图像在精确尺寸(例如:100x100)下有效,否则会向用户显示错误。

为了澄清,我将图像放在 post 变量中,根本没有将其保存到文件中。

【问题讨论】:

    标签: php image post uri


    【解决方案1】:

    第二种解决方案,如果您无法将任何内容写入磁盘

    $_POST["image_data"] = "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7";
    
    function check_uri_image($data, $width=100, $height=100, $mime="image/png"){
        $success = false;
    
        if(preg_match("#^data:(image/(gif|png|jpeg));base64,(.*)$#mi", $data, $matches)){
            if($img = imagecreatefromstring(base64_decode($matches[3]))){
                if((imagesx($img) == $width) && (imagesy($img) == $height)){
                    if(strtolower($matches[1]) == $mime){
                        $success = true;
                        }
                    }
    
                imagedestroy($img);
                }
            }
    
        return $success;
        }
    
    var_dump(check_uri_image($_POST["image_data"], 16, 16, "image/gif"));
    

    【讨论】:

      【解决方案2】:

      请尝试:

      $_POST["image_data"] = "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7";
      
      function check_uri_image($data, $width=100, $height=100, $mime="image/png"){
          $success = false;
      
          if(preg_match("#^data:image/(gif|png|jpeg);base64,(.*)$#mi", $data, $matches)){
              if($tmp = tempnam(sys_get_temp_dir(), "datauri.")){
                  if($fh = fopen($tmp, "wb")){
                      fwrite($fh, base64_decode($matches[2]));
                      fclose($fh);
      
                      $info = getimagesize($tmp);
      
                      if(is_array($info)){
                          if(($info[0] == $width) && ($info[1] == $height) && ($info["mime"] == $mime)){
                              $success = true;
                              }
                          }
      
                      unlink($tmp);
                      }           
                  }
              }
      
          return $success;
          }
      
      var_dump(check_uri_image($_POST["image_data"], 16, 16, "image/gif"));
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 2011-01-24
        相关资源
        最近更新 更多