3

画像 (JPEG) をアップロードするときに DPI を確認する方法はありますか?

バリデータとして、フォームに統合したいと思います。

4

1 に答える 1

3

Imagick (または Gmagick) で画像を開いてから を呼び出す必要がありますgetImageResolution

$image = new Imagick($path_to_image);
var_dump($image->getImageResolution());

結果:

Array
(
    [x]=>75
    [y]=>75
)

編集:

symfony への統合には、そのためのカスタム バリデーターを使用できます。デフォルトのものを拡張してファイルを検証し、DPI 制限を追加します。

これをに作成します/lib/validator/myCustomValidatorFile .class.php

<?php

class myCustomValidatorFile extends sfValidatorFile
{
  protected function configure($options = array(), $messages = array())
  {
    parent::configure($options, $messages);

    $this->addOption('resolution_dpi');
    $this->addMessage('resolution_dpi', 'DPI resolution is wrong, you should use image with %resolution_dpi% DPI.');
  }

  protected function doClean($value)
  {
    $validated_file = parent::doClean($value);

    $image      = new Imagick($validated_file->getTempName());
    $resolution = $image->getImageResolution();

    if (empty($resolution))
    {
      throw new sfValidatorError($this, 'invalid');
    }

    if ((isset($resolution['x']) && $resolution['x'] < $this->getOption('resolution_dpi')) || (isset($resolution['y']) && $resolution['y'] < $this->getOption('resolution_dpi')))
    {
      throw new sfValidatorError($this, 'resolution_dpi', array('resolution_dpi' => $this->getOption('resolution_dpi')));
    }

    return $validated_file;
  }
}

次に、フォーム内で、ファイルに次のバリデータを使用します。

$this->validatorSchema['file'] = new myCustomValidatorFile(array(
  'resolution_dpi' => 300,
  'mime_types'     => 'web_images',
  'path'           => sfConfig::get('sf_upload_dir'),
  'required'       => true
));
于 2013-01-16T13:00:19.947 に答える