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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

9回答

7092閲覧

画像ってなにをもって画像なのでしょうか?

uuushiro

総合スコア41

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

3グッド

11クリップ

投稿2017/07/18 07:47

数あるファイルの中で、それが画像だと判断するのに最も適した基準はなんでしょうか?

takotakot, nnahito👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/07/18 07:55 編集

最も適した基準とはなんでしょうか。とにかく最短時間で何万とあるファイルを判定するのか、十分判定時間を設けて判定するのか。場合によって最適な方法は変わると思います。自前で用意するファイルなのか、信用をおけない外部から受信するファイルなのか、でも最適な方法は変わります。
szk.

2017/07/18 08:02

以前にも同じような質問をされていますが、何が解決しなかったか具体的に書いてください。 また誰目線の"基準"でしょうか?各個人が画像と認識すれば、それは画像です。jpegでもpdfでもtextでも。
退会済みユーザー

退会済みユーザー

2017/07/19 07:16

もしかして期待している回答が得られないのでしょうか、その場合は、質問文をわかりやすく誤解が生じないよう丁寧に説明を添えると良いと思います。
uuushiro

2017/07/20 00:19

みなさま、ご回答ありがとうございます。以前に質問をした時は、rubyで「信用を置けない外部から受信したファイル」に対して安全な画像かどうかを判定したかったです。その時に回答していただいたのは、Rmagickのinspectというメソッドで画像情報を文字列で取得するという解決方法でした。画像系のライブラリで開けるかどうかという基準でしょうか。今回別途質問をさせていただいたのは、そもそもrubyとか関係なく一般的な画像の判断基準がわかれば、 外部から受信したファイルに対してその判断を下せば安全に運用できるのではと考え投稿させていただきました。
退会済みユーザー

退会済みユーザー

2017/07/20 08:43 編集

画像ファイルが特殊なものではない(一般的なものである)限り、ライブラリや言語間でやり方に若干の差はあっても見分け方の基本的な部分は自然と一般的なものになると私は予想します。つまりRubyでのやり方もRuby独自のものではなく一般的な方法なのではと。
guest

回答9

0

ベストアンサー

本格的には、各画像フォーマットのデータ構造が適切かどうかを判定します。
簡易的には、ファイルの決まった位置に決まったデータが有るかどうかを判定します。

画像の生データから種類を判別する方法 | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

上記のブログ記事で説明されている方法をシンプルに実装した関数を作って、
大量処理にも対応できるようにすると良いかもしれません。

外部から受信したファイルの判定においては、
ファイル名に拡張子がつく保証もなければ、
拡張子が偽装されて悪意あるファイルになる可能性もあります。
どの程度の信用度がほしいのかわかりかねますが、
拡張子や受信時のMIMEタイプだけで判断するのは危険だと思います。

画像処理ライブラリとの組み合わせも判定精度においては良いと思いますが、
画像処理ライブラリを読み込むオーバーヘッドがないか事前テストで確認した方がいいです。

投稿2017/07/18 07:51

編集2017/07/18 08:02
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

計算機科学の問題と捉えて、「画像」を「ウイルス」と置換するとウイルス対策ソフトの説明がそのまま該当するのでわかりやすいかもしれません。

判断する方法は二つです。

  • パターンマッチング法

あらかじめ用意した定義ファイル(画像ファイルフォーマット仕様など)と比較する。

  • ヒューリスティック法

データを解析し、画像のようなデータが含まれていれば、画像とする。
サンドボックスでエミュレートして画像としてオープンできれば画像とする。

「ウイルス」と置換できるとしたことからわかるかもしれませんが、あらゆるファイルを間違いなく「画像」と判定することは不可能です。(ここでの不可能は比喩ではなく、証明されている事実です。)

とはいうものの、公開されている画像判定ロジックがあるので、そこまで深く考えず、それらを利用したらいいと思います。

投稿2017/07/18 10:23

shoko1

総合スコア372

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

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

退会済みユーザー

退会済みユーザー

2017/07/26 01:36

画像を画層って認識することはできるんじゃないですかね? 画像じゃないものを画像って誤検出することは回避できない気がしますが。
shoko1

2017/07/26 02:13

例えばオリジナルソフトを作って、そのソフト専用の画像フォーマットを新規に作成したとします。画像を認識するシステムにそのフォーマットを判断する方法を登録するまでは認識できないでしょう(そのためのヒューリスティックですが完全ではない)。「ウイルス」と同じで「画像」もいくらでも種類が増やせ、そのすべてに完全に対応するすべはありません。
退会済みユーザー

退会済みユーザー

2017/07/26 02:16

あぁ、そういう意味ですか! 理解しました。
guest

0

投稿2017/07/18 07:55

moonphase

総合スコア6621

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

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

0

実用上は、画像系のライブラリで開けるかどうかじゃないですかね。

投稿2017/07/18 07:55

LouiS0616

総合スコア35660

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

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

0

簡単なのは、拡張子。
ファイルを読んで、解釈して・・・というのもあるけど、それは時間がかかるよね?

投稿2017/07/18 07:51

kiichi54321

総合スコア1984

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

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

0

私の場合は、画像として処理できれば画像だと考えています。

エラーが出たら処理をやめる。エラーが出なければ処理を継続する
という風にすることが私の場合は多いです。

こちらの質問にも書きましたが
イメージとしては以下のような感じで判定します。

C#

1using System; 2using System.Drawing; 3 4class Program 5{ 6 static void Main(string[] args) 7 { 8 string[] paths = 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}
*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は画像です。

投稿2017/07/19 06:14

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

退会済みユーザー

総合スコア0

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

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

0

いろいろあるとは思いますが標準化されたもので一般的に考えるなら
拡張子だと思います。

投稿2017/07/18 07:53

elz4m

総合スコア69

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

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

0

image/***のMediaTypeを持つ形式のバイナリフォーマットファイル、とかでどうでしょう。

投稿2017/07/18 07:51

kunai

総合スコア5405

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

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

0

Linuxであれば、fileコマンドでどのようなファイルかを簡易的にチェックしてくれます。
その後、場合によっては本格的なチェックをすると良いかと思います。

投稿2017/07/21 07:18

Youichi256

総合スコア204

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問