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;
?>
以上です。
ローカルでためしたところ画像は表示されず、かわりに代替画像としてアドレスが表示されます。
考えられる原因はなんでしょうか??
よろしくお願いします。
お礼
結論から言うと、配列に格納して送るのではなく、文字型変数にカンマで区切って連結し送ることで実現しました。 ■FLASH側 on (release) { data[0]="りんご"; data[1]="みかん"; --------略-------- //phpに配列データを送信 strData = data[0]+","+data[1]; transmit.recData = strData; transmit.sendAndLoad("test.php", receipt, "POST"); 文字型であれば送信可能なのに、配列データは不可能なのは、レンタルしているサーバーの仕様なのかもしれません。 スッキリしませんが仕様と割り切ります…。 初投稿で不安な中、返信頂いて嬉しかったです。 有難う御座いました!