web-dev-qa-db-ja.com

アップロードした画像を特定のアスペクト比に制限するにはどうすればよいですか?

私がやりたいのは、コアの画像フィールドを使用して、アップロードされた画像を解像度だけでなくアスペクト比にも制限することです。

つまり、画像は幅と高さが2:3で、少なくとも200 x 300ピクセルである必要があります。

画像スタイルは画像の表示方法を操作できることを知っています。私はそれに興味がありません。むしろ、現在解像度の最小/最大設定を設定できるのと同じ方法でアップロードを制限したいのですが、アスペクト比を追加したいと思います。

私の推測では、Imageのチェックに新しいチェックを追加するには、独自のモジュールを作成する必要がありますが、おそらくもっと簡単な方法を知っています。

5
ezrock

私のアドバイスは、カスタムファイルバリデーターを実装することです。

ファイルの保存時にこれらがどのように使用されるかを確認するには、 file_save_upload をチェックアウトします。実現したいものに非常に近い実装例については、 file_validate_image_resolution をチェックしてください。

これで私の超迅速な試み

/**
 * Validates an image upload as having a particular aspect ratio
 *
 * @param $file
 *   - the uploaded file
 * @param $aspect_ratio
 *   - the apect ratio in the format [WIDTH]:[HEIGHT]. E.g. '3:2'
 */
function file_validate_image_aspect(stdClass $file, $aspect_ratio = 0) {
  $errors = array();

  // Check first that the file is an image.
  if ($info = image_get_info($file->uri)) {
    if ($aspect_ratio) {
      // Check that it is smaller than the given dimensions.
      list($width, $height) = explode(':', $aspect_ratio);
      if ($width * $info['height'] != $height * $info['width']) {
        $errors[] = t('The image is the wrong aspect ratio; the aspect ratio needed is %ratio.', array('%ratio' => $aspect_ratio));
      }
    }
  }

  return $errors;
}
7
wiifm