画像 (JPEG) をアップロードするときに DPI を確認する方法はありますか?
バリデータとして、フォームに統合したいと思います。
画像 (JPEG) をアップロードするときに DPI を確認する方法はありますか?
バリデータとして、フォームに統合したいと思います。
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
));