http://q.hatena.ne.jp/1142042592 での回答を参考に何回かトライしましたが、だめでした。
よろしくお願いします。
度々失礼いたします。
前回の私の回答は適切ではありませんでした。
なんとなく違和感があったのですが、そのまま回答してしまいました。
申し訳ありません。
imagejpeg()で画像$im_outを一度ファイルに出力し、そのファイルをfopen()、fread()すればご要望の機能を実現できます。
(一度ファイルにするのがダサいのですが、他のやり方が分かりませんでした…。)
例としては、imagecopyresized()の後、以下のようなソースを書き足すと良いはずです。
元のソースの$fpで始まる行からmysql_real_escape_string()を含む行を以下の内容に変更すれば動くはずです。
(サンプルで稼動確認しました。)
// リサイズ後のファイル名を決定 $resized_img_file_name = $_FILES["upfile"]["tmp_name"] . "_after_resize" ; // imagejpeg()で$im_outをファイルに落とす imagejpeg($im_out, $resized_img_file_name); // 画像ファイルをバイナリデータとして読み込む $fp = fopen ($resized_img_file_name, "rb"); if(!$fp) { print("リサイズした画像ファイルを開けませんでした"); exit; } $resized_image = fread($fp, filesize($resized_img_file_name)); fclose($fp); // リサイズ後の画像ファイルを削除 unlink($resized_img_file_name); // SQL用に特殊文字をエスケープ $resized_image = mysql_real_escape_string($resized_image);
後は、$resized_imageをSQLのINSERTでDBに挿入すれば良いはずです。
(テーブルの構成が分からなかったため、SQLは修正していません。)
また、mysql_real_escape_string()を使っていれば、addslashes()は不要だと思います。
重複して利用すると問題があったはずです。
(このあたりは定かではありませんので、色々と試してみてください。)
DBの選択までは、「esecuaの日記」上で公開されているソースに記載されていない部分で完了している前提で書きました。
参考になれば幸いです。
もし上手くいかなかった場合、どう上手く行かないのかをコメントでつけてくだされば、時間がある時に改善案を考えてみます。
とりあえず何回か回答できるようなので、こちらに再現環境はないのですが、ソースだけ見て回答してみます。
失敗した場合エラーメッセージをそのまま載せていただけるとほかの方も回答しやすいと思うのでよろしくお願いします。引用符がはてなの表示で変換されている場合は半角に戻してください。
if (is_uploaded_file($_FILES['UpFile']['tmp_name'])) {
if ( mb_strpos($_FILES['UpFile']['type'], 'jpeg') ) {
// JPEG画像を読み込む
$im_inp = ImageCreateFromJPEG($_FILES['UpFile']['tmp_name']);
$ix = ImageSX($im_inp); // 読み込んだ画像の横サイズを取得
$iy = ImageSY($im_inp); // 読み込んだ画像の縦サイズを取得
$ox = $resizeX; // サイズ変更後の横サイズ
$oy = $ox;
// サイズ変更後の画像データを生成
$im_out = ImageCreateTrueColor($ox, $oy);
imagecopyresized($im_out,$im_inp,0,0,0,0,$ox,$oy,$ix,$iy);
$im_out = addslashes($im_out);
$im_out = mysql_real_escape_string($im_out);
$sql = "INSERT INTO `hatena` VALUES `gazou` = '".$im_out."' WHERE `number` = '".$yournumber."';";
mysql_query($sql,$con);
echo"アップデート完了!";
// メモリーの解放
ImageDestroy($im_inp);
ImageDestroy($im_out);
exit;
} //jpeg
} //is_uploaded?
その方法でトライしてみましたが、データベースに格納できているものの、表示すると Resource id #数字 と表示され、画像ファイルが表示できないのです。
度々失礼いたします。
前回の私の回答は適切ではありませんでした。
なんとなく違和感があったのですが、そのまま回答してしまいました。
申し訳ありません。
imagejpeg()で画像$im_outを一度ファイルに出力し、そのファイルをfopen()、fread()すればご要望の機能を実現できます。
(一度ファイルにするのがダサいのですが、他のやり方が分かりませんでした…。)
例としては、imagecopyresized()の後、以下のようなソースを書き足すと良いはずです。
元のソースの$fpで始まる行からmysql_real_escape_string()を含む行を以下の内容に変更すれば動くはずです。
(サンプルで稼動確認しました。)
// リサイズ後のファイル名を決定 $resized_img_file_name = $_FILES["upfile"]["tmp_name"] . "_after_resize" ; // imagejpeg()で$im_outをファイルに落とす imagejpeg($im_out, $resized_img_file_name); // 画像ファイルをバイナリデータとして読み込む $fp = fopen ($resized_img_file_name, "rb"); if(!$fp) { print("リサイズした画像ファイルを開けませんでした"); exit; } $resized_image = fread($fp, filesize($resized_img_file_name)); fclose($fp); // リサイズ後の画像ファイルを削除 unlink($resized_img_file_name); // SQL用に特殊文字をエスケープ $resized_image = mysql_real_escape_string($resized_image);
後は、$resized_imageをSQLのINSERTでDBに挿入すれば良いはずです。
(テーブルの構成が分からなかったため、SQLは修正していません。)
また、mysql_real_escape_string()を使っていれば、addslashes()は不要だと思います。
重複して利用すると問題があったはずです。
(このあたりは定かではありませんので、色々と試してみてください。)
DBの選択までは、「esecuaの日記」上で公開されているソースに記載されていない部分で完了している前提で書きました。
参考になれば幸いです。
もし上手くいかなかった場合、どう上手く行かないのかをコメントでつけてくだされば、時間がある時に改善案を考えてみます。
以前に続きご丁寧な回答ありがとうございます。
ご回答のソースでリサイズ、データベースの格納、表示などできました。ありがとうございます。
度々失礼いたします。
前回の私の回答は適切ではありませんでした。
なんとなく違和感があったのですが、そのまま回答してしまいました。
申し訳ありません。
imagejpeg()で画像$im_outを一度ファイルに出力し、そのファイルをfopen()、fread()すればご要望の機能を実現できます。
(一度ファイルにするのがダサいのですが、他のやり方が分かりませんでした…。)
例としては、imagecopyresized()の後、以下のようなソースを書き足すと良いはずです。
元のソースの$fpで始まる行からmysql_real_escape_string()を含む行を以下の内容に変更すれば動くはずです。
(サンプルで稼動確認しました。)
// リサイズ後のファイル名を決定 $resized_img_file_name = $_FILES["upfile"]["tmp_name"] . "_after_resize" ; // imagejpeg()で$im_outをファイルに落とす imagejpeg($im_out, $resized_img_file_name); // 画像ファイルをバイナリデータとして読み込む $fp = fopen ($resized_img_file_name, "rb"); if(!$fp) { print("リサイズした画像ファイルを開けませんでした"); exit; } $resized_image = fread($fp, filesize($resized_img_file_name)); fclose($fp); // リサイズ後の画像ファイルを削除 unlink($resized_img_file_name); // SQL用に特殊文字をエスケープ $resized_image = mysql_real_escape_string($resized_image);
後は、$resized_imageをSQLのINSERTでDBに挿入すれば良いはずです。
(テーブルの構成が分からなかったため、SQLは修正していません。)
また、mysql_real_escape_string()を使っていれば、addslashes()は不要だと思います。
重複して利用すると問題があったはずです。
(このあたりは定かではありませんので、色々と試してみてください。)
DBの選択までは、「esecuaの日記」上で公開されているソースに記載されていない部分で完了している前提で書きました。
参考になれば幸いです。
もし上手くいかなかった場合、どう上手く行かないのかをコメントでつけてくだされば、時間がある時に改善案を考えてみます。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | 凡 | 421回 | 401回 | 75回 | 2006-03-13 21:07:56 |
以前に続きご丁寧な回答ありがとうございます。
ご回答のソースでリサイズ、データベースの格納、表示などできました。ありがとうございます。