thangman22 / google-cloud-vision-php

GoogleCloudVision Library for PHP
24 stars 19 forks source link

Base64 decoding failed. #10

Open Dayjo opened 7 years ago

Dayjo commented 7 years ago

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 commented 7 years ago

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..