Commit 18b7e425 authored by webchick's avatar webchick
Browse files

#269337 by egfrith and wrunt: Added support for more image types (PDF, TIFF, EPS, etc.).

parent c4a548f6
......@@ -101,36 +101,40 @@ function image_toolkit_invoke($method, stdClass $image, array $params = array())
/**
* Get details about an image.
*
* Drupal only supports GIF, JPG and PNG file formats.
* Drupal supports GIF, JPG and PNG file formats when used with the GD
* toolkit, and may support others, depending on which toolkits are
* installed.
*
* @param $filepath
* String specifying the path of the image file.
* @param $toolkit
* An optional image toolkit name to override the default.
* @return
* FALSE, if the file could not be found or is not an image. Otherwise, a
* keyed array containing information about the image:
* 'width' - Width, in pixels.
* 'height' - Height, in pixels.
* 'extension' - Commonly used file extension for the image.
* 'mime_type' - MIME type ('image/jpeg', 'image/gif', 'image/png').
* 'file_size' - File size in bytes.
* - "width": Width, in pixels.
* - "height": Height, in pixels.
* - "extension": Commonly used file extension for the image.
* - "mime_type": MIME type ('image/jpeg', 'image/gif', 'image/png').
* - "file_size": File size in bytes.
*/
function image_get_info($filepath) {
function image_get_info($filepath, $toolkit = FALSE) {
$details = FALSE;
if (!is_file($filepath)) {
return FALSE;
return $details;
}
$details = FALSE;
$data = @getimagesize($filepath);
$file_size = @filesize($filepath);
if (isset($data) && is_array($data)) {
$extensions = array('1' => 'gif', '2' => 'jpg', '3' => 'png');
$extension = array_key_exists($data[2], $extensions) ? $extensions[$data[2]] : '';
$details = array('width' => $data[0],
'height' => $data[1],
'extension' => $extension,
'file_size' => $file_size,
'mime_type' => $data['mime']);
if (!$toolkit) {
$toolkit = image_get_toolkit();
}
if ($toolkit) {
$image = new stdClass();
$image->source = $filepath;
$image->toolkit = $toolkit;
$details = image_toolkit_invoke('get_info', $image);
if (isset($details) && is_array($details)) {
$details['file_size'] = filesize($filepath);
}
}
return $details;
......@@ -343,10 +347,12 @@ function image_load($file, $toolkit = FALSE) {
if ($toolkit) {
$image = new stdClass();
$image->source = $file;
$image->info = image_get_info($file);
$image->toolkit = $toolkit;
if (image_toolkit_invoke('load', $image)) {
return $image;
$image->info = image_get_info($file, $toolkit);
if (isset($image->info) && is_array($image->info)) {
$image->toolkit = $toolkit;
if (image_toolkit_invoke('load', $image)) {
return $image;
}
}
}
return FALSE;
......@@ -374,7 +380,7 @@ function image_save(stdClass $image, $destination = NULL) {
if ($return = image_toolkit_invoke('save', $image, array($destination))) {
// Clear the cached file size and refresh the image information.
clearstatcache();
$image->info = image_get_info($destination);
$image->info = image_get_info($destination, $image->toolkit);
if (drupal_chmod($destination)) {
return $return;
......
......@@ -96,7 +96,7 @@ class ImageToolkitUnitTest extends ImageToolkitTestCase {
$image = image_load($this->file, $this->toolkit);
$this->assertTrue(is_object($image), t('Returned an object.'));
$this->assertEqual($this->toolkit, $image->toolkit, t('Image had toolkit set.'));
$this->assertToolkitOperationsCalled(array('load'));
$this->assertToolkitOperationsCalled(array('load', 'get_info'));
}
/**
......
......@@ -58,8 +58,8 @@ function image_test_get_all_calls() {
* Store the values passed to a toolkit call.
*
* @param $op
* One of the image toolkit operations: 'load', 'save', 'settings', 'resize',
* 'rotate', 'crop', 'desaturate'.
* One of the image toolkit operations: 'get_info', 'load', 'save',
* 'settings', 'resize', 'rotate', 'crop', 'desaturate'.
* @param $args
* Values passed to hook.
* @see image_test_get_all_calls()
......@@ -79,6 +79,14 @@ function image_test_settings() {
return array();
}
/**
* Image toolkit's get_info operation.
*/
function image_test_get_info(stdClass $image) {
_image_test_log_call('get_info', array($image));
return array();
}
/**
* Image tookit's load operation.
*/
......
......@@ -320,6 +320,39 @@ function image_gd_create_tmp(stdClass $image, $width, $height) {
return $res;
}
/**
* Get details about an image.
*
* @param $image
* An image object.
* @return
* FALSE, if the file could not be found or is not an image. Otherwise, a
* keyed array containing information about the image:
* - "width": Width, in pixels.
* - "height": Height, in pixels.
* - "extension": Commonly used file extension for the image.
* - "mime_type": MIME type ('image/jpeg', 'image/gif', 'image/png').
*
* @see image_get_info()
*/
function image_gd_get_info(stdClass $image) {
$details = FALSE;
$data = getimagesize($image->source);
if (isset($data) && is_array($data)) {
$extensions = array('1' => 'gif', '2' => 'jpg', '3' => 'png');
$extension = array_key_exists($data[2], $extensions) ? $extensions[$data[2]] : '';
$details = array(
'width' => $data[0],
'height' => $data[1],
'extension' => $extension,
'mime_type' => $data['mime'],
);
}
return $details;
}
/**
* @} End of "ingroup image".
*/
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment