configFactory = $config_factory; $this->iiifConfig= $this->configFactory->get('islandora_iiif.settings'); $this->httpClient = $http_client; $this->logger = $channel; $this->jwtAuth = $jwt_auth; } /** * The IIIF base URL for an image. * Visiting this URL will resolve to the info.json for the image. * * @return string * The absolute URL on the IIIF server. */ public function baseUrl($image) { if ($this->iiifConfig->get('use_relative_paths')) { $file_url = ltrim($image->createFileUrl(TRUE), '/'); } else { $file_url = $image->createFileUrl(FALSE); } $iiif_address = $this->iiifConfig->get('iiif_server'); $iiif_url = rtrim($iiif_address, '/') . '/' . urlencode($file_url); return $iiif_url; } /** * Retrieve an image's dimensions via the IIIF server. * * @param \Drupal\File\FileInterface $file * The image file. * @return array|FALSE * The image dimensions in an array as [$width, $height] */ public function getImageDimensions(FileInterface $file) { $iiif_url = $this->baseUrl($file); try { $info_json = $this->httpClient->request('get', $iiif_url, [ 'headers' => [ 'Authorization' => 'bearer ' . $this->jwtAuth->generateToken() ] ])->getBody(); $resource = json_decode($info_json, TRUE); $width = $resource['width']; $height = $resource['height']; if (is_numeric($width) && is_numeric($height)) { return [intval($width), intval($height)]; } } catch (ClientException | ConnectException $e) { $this->logger->info("Error getting image file dimensions from IIIF server: " . $e->getMessage()); } return FALSE; } }