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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

5回答

1492閲覧

PHP、SQL画像出力の際に画像が一部黒くなります。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

1クリップ

投稿2016/10/03 06:44

編集2016/10/03 07:00

イメージ説明

PHPとSQLを使って画像を取得するサイトを作っているのですが昨日新しく入れた画像の一部が黒くなってしまいました。

エラーかと思って同じ画像をもう一度保存して取得したところ同じように一部が黒くなりました。

他の画像を試してみると黒くなるのと、そうでないのがあります。
これはファイルのサイズの問題なのでしょうか。

その場合、PHP.iniのpost_max_size=ooMBを変更すれば大丈夫なのでしょうか。
それとも別のやり方があるのでしょうか。

よろしくお願いします。

*追加
先ほどphp.iniの「post_max_size」サイズを倍にしてみましたが一部黒いまま保存されてしまいます。
別の問題があるということでしょうか。

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

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

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

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

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

guest

回答5

0

元ファイル、データ投入時、データ呼び出し時、各サイズを確認してみてください
データ投入に失敗しているだけではないでしょうか?
ただしくプレースホルダで処理されていますか?
投入時に壊れているだけではないですか?

投稿2016/10/03 07:10

yambejp

総合スコア114572

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

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

0

今回はデータベースのカラムの問題でした。
BLOBだと最長65,535バイトまでとのことでそれ以上の画像を保存する場合はMEDIUMBLOBやLONGBLOBにすると画像の保存や出力はうまくいきます。

alter table テーブル名 modify カラム名 MEDIUMBLOB;

ただやり方としては回答してくださった方がいように
「ディレクトリへの保存」が普通で一般的だそうです。

今回はあくまでカラム定義BLOBで画像がキレイに入らないのはカラムの定義(容量)の問題でMEDIUMBLOBやLONGBLOBで治るです。

投稿2016/10/03 07:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

「SQLを使って」というのが意味不明ですが、おそらく「PHPで取得してきた画像をデータベースに入れている」という意味ですかね?
もしそうだとしたらまず「SQL」および「データベース」という単語・概念の意味についてググって違いを理解してください。

で、具体的な解決についてですが、

1:画像を入れているデータベースのカラムの種別と制限サイズはどうなっていますか?
2:そもそもなぜ画像をDBに入れたいのですか? ファイルのままディレクトリに保存すればいいのでは?

以上2点をお知らせください。

投稿2016/10/03 06:53

zico_teratail

総合スコア907

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

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

退会済みユーザー

退会済みユーザー

2016/10/03 07:04

ご連絡ありがとうございます。 ①カラム:BLOB型(制限サイズはデフォルトのままだと思います。) ②検索してたどり着いたのがデータベースに入れるやり方になります。 もしお時間ありましたらディレクトリ保存のメリットややり方聞きたいです。 よろしくお願いします。
zico_teratail

2016/10/03 07:18

たとえばMySQLの場合、BLOB型は最長65,535バイトまでなので、画像のデータ全てを格納できていないのでしょう。MEDIUMBLOBやLONGBLOBにすれば、もっと大きなサイズを格納できます。 >ディレクトリ保存のメリット メリットというか、そうするのが普通で一般的です。 DBに入れるとしたら画像の情報(ファイル名とかファイルの置き場所とか)だけで、画像そのものはDBにいれずにファイルとして保存するのが普通です。一般的にDBというのは情報を検索するのに適した設計になっていますので、モノ(画像そのもの実体とか)をなんでもかんでも放り込んでおく箱のように考えるとのちのち面倒なことになると思います。 逆にあなたはDBに入れるメリットを理解していて、それを説明できますか? 説明できるならDBに入れるというのもひとつの考え方としてアリです。 しかしよく分かっていないのであれば、やめたほうがいいです。 >やり方 まず自分でググって、それでも分からない場合は質問してください。
退会済みユーザー

退会済みユーザー

2016/10/03 07:26

回答ありがとうございます。 ディレクトリ保存が一般的なんですね、、、全く知らなかったです。 データベースへのメリットというかそれ以外知らなかったので別の方法の方が一般的だったことに驚いています。。 とりあえずBLOBをMEDIUMBLOBやLONGBLOBに変更してみます。 ディレクトリ保存も調べてみます。 またわからないことが出てきましたら質問いたします。 お手数おかけしました。 ご回答いただきありがとうございます。
退会済みユーザー

退会済みユーザー

2016/10/03 07:32

先ほどカラム定義をBLOB→MEDIUMBLOBに変更したら画像の方キレイに出力されました。ただディレクトリ保存の方が正しいとのことですのでそちらも試してみたいと思います。 的確なアドバイスありがとうございます。ベストアンサーに選ばせていただきます。
zico_teratail

2016/10/03 07:37

>ディレクトリ保存の方が正しい 「正しい」というと語弊がありますが、一般的な使い方ではDBに画像を入れるメリットがあまり無いというだけです。逆にデメリットはたくさんあります(書くと長くなるので省略)。 とりあえず問題が解決して良かったです。
guest

0

おそらく、入れた画像が透過PNGだったのではないかと推測します。

αチャンネルがある場合、それを意識したハンドリングが必要です(一例。なお、具体的な処理はやることに依存します)。

投稿2016/10/03 06:49

maisumakun

総合スコア145121

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

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

退会済みユーザー

退会済みユーザー

2016/10/03 07:01

回答ありがとうございます。 リンク先を確認しましたが当方の症状と違いましたので追加で画像の方を添付いたしました。 背景透過ではなく、一部が黒くなって読み取れない?or保存できていない状態になります。 よろしくお願いします。
guest

0

SQLということはLOBでしょうか?
差支えないない範囲で現象を再現できる最小限のコード、画像のサイズやハードウェアの性能は提示した方が解決が早いです。
データ量が多いbmpで表示していたのをjpgにしたり、求める画質に許容できる範囲で画像をリサイズしたら解決なんて初歩的な対応で高価なサーバーのリプレイスをしないで済んだ、ってこともあります。

投稿2016/10/03 07:06

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問