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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

JavaScript

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

Q&A

解決済

1回答

4897閲覧

PHPを利用して画像をリサイズしてからデータベースに登録する方法

nodoame

総合スコア12

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

JavaScript

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

0グッド

2クリップ

投稿2016/09/08 03:22

###前提・実現したいこと
PHPを利用して画像のサイズをリサイズしてからデータベースに登録したいです。

###発生している問題・エラーメッセージ

iPhoneで撮影した画像などをそのままデータベースに登録しようとすると保存されません。 ちなみにサイズの小さい画像であれば登録できるので、登録方法そのものには問題ないと思います。

###該当のソースコード

HTML

1<form action="image_test" method="post" name="select" enctype="multipart/form-data" > 2<p>写真を選択</p> 3<input type="file" name="image" id="image" alt="写真を選択"> 4<input type="submit" alt="送信"> 5</form>

PHP

1function sql_call($str) 2{ 3 $str = mysql_query($str); 4 return $str; 5} 6$data = fread($fp, $_FILES['image']['size']); 7$sqlsel=sprintf('INSERT INTO sheet VALUES(null,"%s")',($data)); 8$querysel=sql_call($sqlsel);

###試したこと
javascriptを利用してリサイズを試みましたが、PHPのみで出来るのであればPHPだけを使ってリサイズを行いたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

リサイズの仕様がわかりません

  • 縦(横)をを◯にする
  • 長い方の辺(または短い方の辺)を◯にする
  • ◯以下の場合リサイズしない/する

など決め込まないとなんともいえません。

だいたいの流れとしては元画像の情報を以下で得て

  • getimagesize()
  • imagecreatefromjpeg()

新規画像を以下で作成します

  • imagecreatetruecolor()
  • imagecopyresampled()
  • imagejpeg()
  • imagedestroy()

ちなみにバイナリデータをsprintfで処理するのは厳しいので
PDOなどでプレースホルダを利用してください

追記(修正)

サンプル送信部分も書いておきます。

PHP

1<?PHP 2if(isset($_FILES['image'])){ 3 $infilename=$_FILES['image']['tmp_name']; 4 $img= createnewimage($infilename); 5 $sql="INSERT INTO hoge VALUES(?)"; 6 header('Content-Type: image/jpeg'); 7 print $img; 8 exit; 9} 10 11function createnewimage($infilename) 12{ 13 if(!file_exists($infilename)) die("no file"); 14 list($width, $height) = getimagesize($infilename); 15 $newwidth =240; 16 $newheight = 70; 17 $newimage = imagecreatetruecolor($newwidth, $newheight); 18 $source = imagecreatefromjpeg($infilename); 19 imagecopyresampled($newimage, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 20 ob_start(); 21 imagejpeg($newimage); 22 $outimage=ob_get_contents(); 23 ob_end_clean(); 24 imagedestroy($newimage); 25 return $outimage; 26} 27?> 28<form enctype="multipart/form-data" method="post"> 29<input type="file" name="image" > 30<input type="submit" value="go"> 31</form>

投稿2016/09/08 03:32

編集2016/09/08 13:32
yambejp

総合スコア114572

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

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

nodoame

2016/09/08 09:28

回答ありがとうございます。 リサイズの仕様について「◯」というのはどういうことですか? ためしにimagedestory()を利用してみたら 【ソースコード】 header('Content-Type: image/gif'); $img = ImageCreate(240, 70);//画像を作成 Imagegif($img); imagedestroy($img); 【実行結果】 GIF87a�F�,�F���������ڋ�޼���H�扦�ʶ� ��L�������� �Ģ��L*�̦� �J�Ԫ���j�ܮ� ������N����� �������������(8HXhx��������)9IYiy�������� *:JZjz�������� +;K[k{���{Y; このような文字化けがでてしまいました。 サーバ内にGDは入っているのを確認したのですが、文字化けの理由がわかりません。 教えていただけると幸いです。
yambejp

2016/09/08 09:33

ごめんなさい、◯=サイズ・・・たとえば100とか200とかです。
nodoame

2016/09/08 09:39

すみませんありがとうございます。 縦or横の長さを固定して大きい場合にリサイズしようと考えていました。
yambejp

2016/09/08 11:20

縦横比を固定じゃなくて、240/70で縦横固定ですね? アスペクトが変わる場合は余白を付けずに無理やり サイズを変更して良いのですね?
nodoame

2016/09/08 11:56

縦横比は変えないでサイズを縮小することを考えていました。
yambejp

2016/09/08 12:25

ちなみに画像ファイルの出力で文字化けが表示されるときは UTF8のBOMがheaderの前に悪さしていることが多いです 縦横比変えたくない場合は、長い辺合わせにするのか、短い辺合わせにするのか など適当に手を加えてください。
nodoame

2016/09/08 13:04

サンプルコードありがとうございます。 さっそく試してみたのですがno fileと出てしまいます。 質問時に載せたhtmlからjpg画像を参照して送ったのですが。。。
yambejp

2016/09/08 13:32

うまく伝わってないかもしれないので送信部も追記修正して書いておきます
nodoame

2016/09/08 13:59

無事出来ました!本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問