• 締切済み

FLASHとPHPの連携について

プログラミング初心者です。 いまポストカード作成システムを大学の課題で作っています。 環境はWindowsXP FLASH8Proです。 最後の保存するところで詰まっています。 現時点でできているところまでHPにアップしたので載せます。 ​http://www.geocities.co.jp/ysmnh028/otameshi.html​ URLより画像を読み込み最後に保存をしたくていろいろ調べていて、PHPと連携させてブラウザ上に新しいページで画像を生成し、それを右クリック⇒保存という形で保存できる事はわかりました。 SAVEボタンのASは以下のとおりです。 on (press) { // 保存用Bitmapを生成 var bmpSnap = new flash.display.BitmapData(300, 444, false); // 保存したいMovieClipをBitmapに描画する bmpSnap.draw(_root.photo_mc); // BitmapデータをRGB配列にする var img_data = new Array(); for (var x = 0; x<bmpSnap.width; x++) { for (var y = 0; y<bmpSnap.height; y++) { var col = bmpSnap.getPixel(x, y); img_data.push(("000000"+col.toString(16)).substr(-6, 6)); } } // データを送信 System.useCodepage = true; myLoader = new LoadVars(); myLoader.img_width = bmpSnap.width; // 画像幅 myLoader.img_height = bmpSnap.height; // 画像高さ myLoader.img_data = img_data.join(""); // 画像データ myLoader.send("snapshot.php", "_blank", "POST"); } PHP側は <?php // 送信データを取得 $img_data = $_POST['img_data']; $width = $_POST['img_width']; $height = $_POST['img_height']; $type = $_POST['img_type']; // IMAGE生成 $source_img = imagecreatetruecolor ($width, $height); // 背景色を生成 $bg_col = imagecolorallocate($source_img, 0xFF, 0xFF, 0xFF); $border_col = imagecolorallocate($source_img, 0x00, 0x00, 0x00); // イメージを描画 $p = 0; for ($x = 0; $x < $width ; $x++) { for ($y = 0; $y < $height ; $y++) { $rgb = hexdec(substr($img_data, $p, 6)); $p+=6; $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $col = imagecolorallocate($source_img, $r, $g, $b); imagesetpixel($source_img, $x, $y, $col); } } header("Content-Type: image/jpeg"); imagejpeg($source_img); exit; // JPEG出力 touch("test.jpg"); // まずは空ファイル生成 imagejpeg($source_img, "test.jpg"); // 画像を保存 header("Content-Type: image/jpeg"); readfile('test.jpg'); exit; ?> 以上です。 ローカルでためしたところ画像は表示されず、かわりに代替画像としてアドレスが表示されます。 考えられる原因はなんでしょうか?? よろしくお願いします。

みんなの回答

回答No.1

URLが見れなかったのでハッキリとは解からないのですが・・・ ASの方はBitmap dataにして送ることをしたことが無いのでなんとも言えないです。 結構簡単に出来るんですね。 PHP側ですが、POSTデータを送る時に画像をimg_dataと言うのを渡していると思うのですが、これが勝手に文字コード変換されているとかではないでしょうか。 mbstring.encoding_translation = On mbstring.http_input = UTF-8 とかで設定していた場合、文字コードを別の物として認識してバイナリデータを壊していそうです。 $_POSTではなく、fopen("php://stdin/","r");とかで取った方がいいかも知れません。 とりあえずバイナリエディタを使ったり、パケットモニタとか使って、処理中にbreakpointを決めてみたりして、どこで問題が発生するのかを見極めるといいんじゃないでしょうか。

関連するQ&A