質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Q&A

解決済

2回答

4657閲覧

アップロードされたファイルが画像かどうかの判定方法。

uuushiro

総合スコア41

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

0グッド

0クリップ

投稿2017/07/13 09:33

###前提・実現したいこと
アップロードされたファイルが画像なのかを判定したいのですが、何を持ってそのファイルは画像といえるのでしょうか?
具体的な話だと、ImageMagickで判定する方法があるのか模索中です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

私はサーバーは分かりません。
ImageMagickも分かりません。

プログラミング初心者の私は処理してみて
エラーが出るかどうかで判断しています。

#追記
ファイルのヘッダについて
バイナリデータのヘッダを正規表現でチェック
バイナリーエディタがあればファイルタイプが分かる!たぶん。
画像ファイルのフォーマットをバイナリデータ処理で判別
画像のファイルタイプをバイナリヘッダで判定する
バイナリーデータから画像の種類を判別する

ImageMagickでもエラーで判定するのならそれ以外の方法で
簡単なものを、ということでバイナリデータのヘッダで
確認する方法を紹介してみます。

私はバイナリファイルに詳しくないのでどの程度正確なのか
画像ファイルによって、正規表現をどうすれば良いのかは
分かりません。

私自身がブラウザのキャッシュから画像を判別してファイル名を
拡張子付きのものに変更して見られるようにするということを
やったときに利用した方法です。(コードはこちらの私の回答)

Magick.NET(ImageMagick)を利用したエラーで画像を判定するときのイメージ。

C#

1using System; 2using ImageMagick; 3 4class Program 5{ 6 static void Main(string[] args) 7 { 8 string[] pathes = System.IO.Directory.GetFiles("images/"); 9 10 foreach (string path in paths) 11 { 12 try 13 { 14 using (MagickImage img = new MagickImage(path)) 15 { 16 string ext = img.Format.ToString(); 17 Console.WriteLine($"*{path}は{ext}です。"); 18 } 19 } 20 catch 21 { 22 Console.WriteLine($" {path}は画像ではありません。"); 23 } 24 } 25 26 Console.ReadKey(); 27 } 28}

例1:
拡張子がJpgに変更されたPngが混ざっていた時の出力結果。

*images/08.jpgはPngです。 *images/09.jpgはPngです。 *images/10.pngはPngです。 *images/11.jpgはPngです。

例2:
画像以外のファイルの拡張子が画像ファイルのものに
変更されていた時の出力結果。

*images/00.jpgはJpegです。 images/01.gifは画像ではありません。 *images/02.gifはGifです。 images/03.pngは画像ではありません。 images/04.psdは画像ではありません。 *images/05.psdはPsdです。 images/06.bmpは画像ではありません。 *images/07.bmpはBmpです。

例3:
例1と例2の混合。

*images/00.jpgはJpegです。 images/01.gifは画像ではありません。 *images/02.gifはGifです。 images/03.pngは画像ではありません。 images/04.psdは画像ではありません。 *images/05.psdはPsdです。 images/06.bmpは画像ではありません。 *images/07.bmpはBmpです。 *images/08.jpgはPngです。 *images/09.jpgはPngです。 *images/10.pngはPngです。 *images/11.jpgはPngです。

Magick.NET(ImageMagick)を使わないでエラーで調べる方法のイメージ。

C#

1using System; 2using System.Drawing; 3 4class Program 5{ 6 static void Main(string[] args) 7 { 8 string[] pathes = System.IO.Directory.GetFiles("images/"); 9 10 foreach (string path in paths) 11 { 12 try 13 { 14 Bitmap bmp = new Bitmap(path); 15 Console.WriteLine($"*{path}は画像です。"); 16 } 17 catch 18 { 19 Console.WriteLine($" {path}は画像ではありません。"); 20 } 21 } 22 23 Console.ReadKey(); 24 } 25} 26

先ほどの例3についての出力。

*images/00.jpgは画像です。 images/01.gifは画像ではありません。 *images/02.gifは画像です。 images/03.pngは画像ではありません。 images/04.psdは画像ではありません。 images/05.psdは画像ではありません。 images/06.bmpは画像ではありません。 *images/07.bmpは画像です。 *images/08.jpgは画像です。 *images/09.jpgは画像です。 *images/10.pngは画像です。 *images/11.jpgは画像です。

こちらの場合だとPSDファイルがサポートされていない?ので
PSDファイルを画像だとは判定できない。
また、これだけだと恐らくファイルの種類も判別できない。

基本的にファイルを画像として読み込めるかどうかで判定を行っている。

投稿2017/07/13 10:05

編集2017/07/19 07:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/18 13:50 編集

ImageMagickのidentifyコマンドでも画像以外のものを読み込むとエラーが発生するよう なのですが、それで判定をするというわけではないのでしょうか? 低評価をした方には是非とも、お話を伺たいです。 私も、エラーを発生させる以外の手軽な画像判定の方法を知りたいと思っています。 ImageMagickの質問なのに、何も分からない素人が勝手なことを言っているけしからん と思って低評価を付けた方には申し訳ありません。
退会済みユーザー

退会済みユーザー

2017/07/19 05:50 編集

おぉ、またマイナスされてる(; ・`д・´) 高評価をくださった方、ありがとうございます。
guest

0

ベストアンサー

ImageMagickのidentifyコマンド

bash

1$ identify -format %m file_name.png 2PNG

投稿2017/07/14 01:38

packet1024

総合スコア342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uuushiro

2017/07/16 13:45

ありがとうございます。解決できそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問