• 17
  • 9月


不知道写这种文章会不会太经常了?好像前几天才更新了一篇啊?这篇本来是昨晚发出来的,忘记了… :s1ruo

X咧这破东西之前没有做过,FLASH咋传值给PHP我都不知道,更不用说传图片了。
问了做FLASH的同事,说是已经把图片截图需要的区域打包成二进制数据post给我了,Orz哥哥我没做过只能硬着头皮上了。
查了下资料,嘿,很简单嘛。

$img = $GLOBALS["HTTP_RAW_POST_DATA"];

if(empty($img)) {
	$img = file_get_contents('php://input');
}

$fp = fopen($filename,"w");
fwrite($fp,$img);
fclose($fp);

这样直接写文件就行了~但是发现不对啊,生成的图片都是傻逼的啊,傻逼windows解析不出来啊…

哦想起来之前我用python抓图的时候都是以二进制方式写入的,可能是php直接写入的缘故?小改了一下:
$fp = fopen($filename,"wb");

很杯具的结果是不行。查了下FLASH的源代码,好像数据是被压缩过再post给我,于是我:

$img = gzuncompress($img);

解压之后IE神奇的能生成一张带有灰色色块的图片了,但是这不是坑爹嘛,还是不行。

混战在Google上找了一天,因为我在16层,设计部在3层,来回商量费时间,直接QQ跟同事说话对方压根就不看QQ信息。

一把火烧起来,我自己改FLASH源码吧,好歹之前在学校我自己学过。搞了几下还是不行,一边看FLASH源码的实现方式,不理解的地方Google一下。然后,终于,在昨晚7天多的时候找到解决方法。

还是跟着源代码Google,英文网站比较靠谱。中文刷刷刷一大片的“转载”,看下面这个链接吧,解决方法也很简单。
http://blog.yoz.sk/2010/10/processing-bitmapdata-getpixels-with-php/

于是最后直接用这上面的函数返回的image资源写个图片就哦了。看代码:

$img = $GLOBALS["HTTP_RAW_POST_DATA"];

#file_put_contents('dd.txt', var_export($GLOBALS, true));

if(empty($img)) {
	$img = file_get_contents('php://input');
}

$img = gzuncompress($img);

$img2 = imagecreatefrombmdstring($img, 120,120);
imagejpeg($img2, $filename);

function imagecreatefrombmdstring($bytes, $width, $height) {
	$img=imagecreatetruecolor($width, $height);
	imagealphablending($img, false);
	imagesavealpha($img, true);

	$x=0;
	$y=0;
	$colors=unpack("N*", $bytes);
	foreach($colors as $color)
	{
	imagesetpixel($img, $x, $y, (0x7f-($color>>25)<<24)|($color&0xffffff));
	if(++$x==$width)
	{
	    $x=0;
	    $y++;
	}
	}
	return $img;
}

好吧,恶心死了,对FLASH传值不太了解,不过总算是搞定了,其他的问题都不是问题啦。

PS:搜索技术文果然还是找英文文档好了,写的很仔细。
PS2:中文的还没见到有人写这种解决方法,基本上都是靠FLASH端将图片用JPGEncode进行二进制转化,然后PHP直接对文件进行操作,所以想想还是再来一篇小小的技术分享吧。本来要小写一下最近的TGS2011的说。
PS3:最近帝都真冷啊..早上起来好冷… :oops:

» 你可以 留言, 或者 返回 到你的站点.

9 回复

  1. Kayo :

    我,是不是沙发呀?
    准备重新学习Php,也想做过相册系统,看来得请教你了~

    [回复]

    油饼小明猪 回复:

    @Kayo, 唔…可以聊一聊 :s1sdmy

    [回复]

  2. 青岛葡萄酒 :

    我还有继续去了解

    [回复]

  3. 韩式婚纱摄影 :

    8O 博主的博客真的很不错呀!

    [回复]

  4. lovee :

    围观技术宅 :pstaisi

    [回复]

    油饼小明猪 回复:

    @lovee, 技术宅在哪? :||

    [回复]

  5. tojary :

    不知道有没有理解错,为什么不把要截取部分保存为临时图片文件呢?

    小明猪有看过swfupload吗?他上传是 multipart/form-data 的 enctype ,所以服务器跟普通上传那样只要 $_FILES[“file”] 处理就行了。
    :?:

    [回复]

    油饼小明猪 回复:

    @tojary, 哈哈,你这是一种方法,但是我同事的方法也是很强的,节省了N多的网络流量。 :)

    [回复]

  6. 怡红公子 :

    :D 好强大,Mark一下啦~

    [回复]

发表评论:

:| :cry: :idea: :o 8) :arrow: :tt :8| :x :hong :( :han :) :P :love :lol: :twisted: :? :evil: :D :dao :mrgreen: ;) :?: :!: :roll: :moe :oops: :|| :jing 8O :pstaisi :pstganbadie :pstwuli :pstheihua more »

 

 


0.07941198348999