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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

5969閲覧

Webで画像をサーバに保存せずに画像処理、表示する方法

gorgeous

総合スコア13

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2015/06/19 07:03

編集2015/06/20 11:02

ユーザーがWebから画像を入力(アップロード)して、サーバーで画像処理を行い、処理後の画像を表示させるウェブページを作成しようとしています。
ですが、ユーザー視点では入力画像をサーバーに保存されると安心して使用していただけないと思います。
そこで、画像を保存せずに、もしくは一時保存で処理、および出力できるかどうか考えています。

画像処理はpythonで行います。
試みた工程は
0. htmlで画像の受付
0. phpでサーバーへのアップロード
0. pythonで画像処理
0. phpで表示
です。pythonはphpでpassthruを使って実行し、処理後画像のパスを出力するようにしています。
これでは①pythonに処理させる際に画像のパスが必要なのでアップロードされた画像をサーバーに保存しています。また、②処理後の画像も保存して、そのパスで表示しています。
この2度の保存を行わずに完結させたいと考えています。

アップロードの際に一時保存されるデータでは表示もpythonにおくることもできないことは確認しました。
passthruでは画像を直接出力できるらしいのですが、調べても実際に行っているサイトは見つからなかったので、よくわかりません。

①、②を改善できる方法はありませんか?
よろしくお願いします。

<追加編集1>
pythonで画像処理を行うのが前提となっています。(pythonのプログラムはすでにあります。)
現在の状況を詳しく書くと
HTML5のフォームで画像を受け付け→PHPで画像を保存→PHPのコマンドを実行させる関数でpythonのプログラムを画像のパスを引数に実行し→pythonで処理後画像を保存→PHPで戻り値を使って画像表示
です。
このやり方しか知らないためこの方法で行っています。PHPは必須ではないです。
追加になりますが使用言語制限はHTML5、PHP、JavaScript、pythonです。使う必要がないものは使わなくてもいいのですが、これらの言語だけで完結させたいです。

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

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

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

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

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

Stripe

2015/06/20 05:30

画像処理にPythonを使うというのは、Pythonで作られた既存の画像処理ツールがあるということですか?
gorgeous

2015/06/20 09:54

申し訳ありません明記しておくべきでした。はい、その通りです。画像処理のプログラムはpythonですでに作られている、または作る予定があります。というよりもpythonで画像処理を行うことが前提なんです。画像処理の部分は絶対pythonでやることになります。 もちろん入力出力の方法によっては変更を加えます。
Stripe

2015/06/20 10:05

「すでに作られている」と「作る予定がある」では意味が180度違いますが、けっきょくのところどっちですか?あと、PHPを使う前提条件もあるんですか?
gorgeous

2015/06/20 10:18

言葉足らずでした。すでに作られるものがあります。そして、別の画像処理プログラムも作成中ということです。 PHPは前提じゃありません。使わなくても大丈夫です。 HTMLのフォームで受け付けた画像を扱う方法とpythonで画像処理を行ってできた画像を(動的に)表示する方法をPHPでできることしか知らないので使っています。
guest

回答4

0

ベストアンサー

まず、PHPをやめて、PythonのWebアプリケーションサーバを使ってください。
これで、Pythonの画像処理プログラムを外部プログラムとしてでなく、直接画像処理ルーチンを利用できるようになります。

つぎに、JavaScriptを使って画像のアップロードとダウンロードを同時に行うようにしてください。
HTMLフォームを使って画像をアップロードすると、そのレスポンスはHTMLになってしまうので、画像ファイルをどこかに保存しなければならなくなります。

ちなみに、このような仕組みにすると、ページのリロードで画像が消えますので、注意してください。

投稿2015/06/20 13:02

編集2015/06/20 13:05
Stripe

総合スコア2183

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

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

gorgeous

2015/06/20 13:56

わかりやすく丁寧に教えてくださってありがとうございます。 この方法を参考にして進めていこうと思うのですが、もう一つ確認したいです。 wwwサーバ?を持っていてそれを使っているのですが、それを使わずにPythonのWebアプリケーションサーバを使うということなのでしょうか? (そうでないとpythonとHTML,JavaScriptを紐付できない?)
Stripe

2015/06/20 14:18

PythonのWebアプリケーションサーバには、いろいろなものがあるので、数ある中から最適なものを選択してください。例えば、Apache用のmod_wsgiモジュールとかもありますし、httpサーバと別にWebアプリケーションサーバを立てて、httpサーバでプロキシすることもできます。
guest

0

PHP,Pythonどちらかに統一しないとできないですよ。
なぜ、PHP,Python 2つのスクリプト言語を使わなければならないんですか?

また、tmpfsに保存すれば、それほど無駄な処理にはならないです。

投稿2015/06/19 23:23

編集2015/06/19 23:25
katsumiy

総合スコア479

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

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

gorgeous

2015/06/20 10:03

回答ありがとうございます。 そうなんですか。 明記していませんでしたがpythonを使うことは前提になっています。 申し訳ありません、pythonのプログラムは私が作成しているわけではなく詳しくないのですが、HTML5にpythonを組み込んで画像の入力受付(フォーム)の処理と画像の表示はできるのでしょうか? tmpfsについて調べてみます。ありがとうございます。
guest

0

UNIXパイプを使うという手はどうでしょうか?
これなら一時ファイルを作ることなくPythonプログラムにバイナリデータを渡して処理させることが出来ます。
PHPは詳しくありませんがproc_openやExpectを使えばできるようです。
Pythonプログラムとの間で標準入出力を使って通信してください。

投稿2015/06/19 08:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gorgeous

2015/06/20 10:30

回答ありがとうございます。 バイナリデータのことがよくわかっていないことに気付きました。 画像ファイル(hoge.jpgなど)を入力として画像処理させるのと同様に、バイナリデータを使って画像処理できるのでしょうか?(画像処理のプログラム自体を書きかえる必要があるのか?) また、バイナリデータを画像として出力できるのでしょうか?(バイナリデータを画像に復元できるのか?)
guest

0

画像をbase64でエンコードする事で、ご希望の動作は実現できないでしょうか?
javascriptで画像をbase64でエンコードできますので、それをphpにpostしてやれば、基本的に文字列での扱いになるので、pythonに引数として渡せるのではないかと。。また逆もしかりです。

投稿2015/06/19 07:35

chiku_

総合スコア1464

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

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

Stripe

2015/06/20 05:28

コマンドラインの引数には文字数制限があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問