google-cloud-vision-php icon indicating copy to clipboard operation
google-cloud-vision-php copied to clipboard

Base64 decoding failed.

Open Dayjo opened this issue 8 years ago • 1 comments

Hello, I'm getting the following error response when trying to use this library;

array(1) {
  ["error"]=>
  array(4) {
    ["code"]=>
    int(400)
    ["message"]=>
    string(110) "Invalid value at 'requests[0].image.content' (TYPE_BYTES), Base64 decoding failed for "data:image/jpg;base64,""
    ["status"]=>
    string(16) "INVALID_ARGUMENT"
    ["details"]=>
    array(1) {
      [0]=>
      array(2) {
        ["@type"]=>
        string(41) "type.googleapis.com/google.rpc.BadRequest"
        ["fieldViolations"]=>
        array(1) {
          [0]=>
          array(2) {
            ["field"]=>
            string(25) "requests[0].image.content"
            ["description"]=>
            string(110) "Invalid value at 'requests[0].image.content' (TYPE_BYTES), Base64 decoding failed for "data:image/jpg;base64,""
          }
        }
      }
    }
  }
}

I've tried with multiple files and types (png and jpg) and get the same error.

I'm using the demo code;


$gcv->setImage("public/images/upsell/drinks1.jpg");

// 1 is Max result
$gcv->addFeature("LABEL_DETECTION", 1);

Doesn't seem to be anything I can do to get it to work.

Dayjo avatar Feb 07 '17 10:02 Dayjo

So, I've managed to get this to work by getting rid of curl from the base64 decode, and also not using data urls. i.e;

/**
     * @param string $path
     *
     * @return string
     */
    public function convertImgtoBased64($path)
    {
        // $urlParts = pathinfo($path);
        // $extension = $urlParts['extension'];
        // $ch = curl_init();
        // curl_setopt($ch, CURLOPT_URL, $path);
        // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        // curl_setopt($ch, CURLOPT_HEADER, 0);
        // $response = curl_exec($ch);
        // curl_close($ch);
        $response = file_get_contents($path);
        $base64 = base64_encode($response);
        return $base64;
    }

This now works..

Dayjo avatar Feb 07 '17 10:02 Dayjo