Подтвердить что ты не робот

Получить/установить DPI с помощью PHP GD/Imagick?

Я создаю веб-приложение, которое будет обрабатывать файлы изображений, которые в конечном итоге будут напечатаны в большом формате.

Как часть этого, мне нужно получить (т.е. прочитать) и установить (т.е. изменить) DPI файла изображения.

Возможно ли это через PHP GD или PHP Imagick?

Спасибо,

BK


Edit:

Доступ к DPI изображения можно получить с помощью метода iMagick getImageResolution:

public function getDPI() {

    $imgDPI = $this->image->getImageResolution();
    return $imgDPI;

}

и DPI изображения можно установить с помощью метода iMagick setImageResolution:

public function setDPI($DPIX, $DPIY) {

    $this->image->setImageResolution($DPIX,$DPIY);

}
4b9b3361

Ответ 1

В примитивном формате растрового изображения, таком как те, что вывод GD, параметр dpi - это просто метаинформация, которую приложение обработки может использовать для преобразования размера пикселя в физическую единицу.

Насколько я знаю, невозможно управлять метаданными непосредственно в GD. Для этого вам придется использовать внешнюю библиотеку.

Тем не менее, я не думаю, что это действительно необходимо. Просто сгенерируйте изображение в любых размерах пикселей, которые вам нужны (количество пикселей - это действительно релевантная информация!), И сообщите процессу печати, какие параметры dpi будут использоваться.

Ответ 2

чтобы использовать "getImageResolution();" вы должны быть уверены, что разрешение в "PixelsPerInch"... иногда это может быть "PixelsPerCentimeter"

используйте следующий код для получения информации об изображении:

$imagick = new Imagick($filename);
$data = $imagick->identifyimage();
var_dump($data);

результат (когда PixelsPerInch):

array(11) {
              ["imageName"]=> string(11) "/jpg300.jpg"
              ["format"]=> string(51) "JPEG (Joint Photographic Experts Group JFIF format)"
              ["units"]=> string(13) "PixelsPerInch"
              ["type"]=> string(9) "TrueColor"
              ["colorSpace"]=> string(3) "RGB"
              ["compression"] => string(4) "JPEG"
              ["fileSize"] => string(6) "8.72mb"
              ["mimetype"] => string(10) "image/jpeg"
              ["geometry"] => array(2) {
                        ["width"]  => int(11812)
                        ["height"] => int(7876)
              }
              ["resolution"]=> array(2) {
                    ["x"]=> float(300)
                    ["y"]=> float(300)
              }
              ["signature"]=> string(64) "7fc387ea465ec716e9fd6e233bb1d3740cb509f5667ed2a4df0199e6e664590e"
            }

или (когда PixelsPerCentimeter):

    array(11) {
      ["imageName"]=> string(8) "/psm.jpg"
      ["format"]=> string(51) "JPEG (Joint Photographic Experts Group JFIF format)"
      ["units"]=> string(19) "PixelsPerCentimeter"
      ["type"]=> string(9) "TrueColor"
      ["colorSpace"]=> string(3) "RGB"
      ["compression"]=> string(4) "JPEG"
      ["fileSize"]=> string(7) "25.01mb"
      ["mimetype"]=> string(10) "image/jpeg"
      ["geometry"]=>
      array(2) {
        ["width"]=> int(11812)
        ["height"]=> int(7876)
      }
      ["resolution"]=>
      array(2) {
        ["x"]=> float(118.11)
        ["y"]=> float(118.11)
      }
      ["signature"]=> string(64) "b491e059624e79a4dee62d9cc7646019927b2222bfed9ac8dd4342185e648eaf"
    }

Ответ 3

Это мое решение для работы на Joox.io

/**
 * @param $filename
 * @return array
 */
function getImageDPI($filename)
{
    $resolutions = null;

    if (class_exists('Imagick')) {

        $image = new Imagick($filename);
        $resolutions = $image->getImageResolution();

    } else {

        $a = fopen($filename, 'r');
        $string = fread($a, 20);
        fclose($a);

        $data = bin2hex(substr($string, 14, 4));
        $x = substr($data, 0, 4);
        $y = substr($data, 4, 4);

        $resolutions = array('x' => hexdec($x), 'y' => hexdec($y));

    }

    return $resolutions;
}