###前提・実現したいこと
アップロードされたファイルが画像なのかを判定したいのですが、何を持ってそのファイルは画像といえるのでしょうか?
具体的な話だと、ImageMagickで判定する方法があるのか模索中です。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答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
0
ベストアンサー
ImageMagickのidentifyコマンド
bash
1$ identify -format %m file_name.png 2PNG
投稿2017/07/14 01:38
総合スコア342
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/18 13:50 編集
退会済みユーザー
2017/07/19 05:50 編集