- 17
- 9月
不知道写这种文章会不会太经常了?好像前几天才更新了一篇啊?这篇本来是昨晚发出来的,忘记了…
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:最近帝都真冷啊..早上起来好冷…
01:589月 18th, 2011
我,是不是沙发呀?
准备重新学习Php,也想做过相册系统,看来得请教你了~
[回复]
油饼小明猪 回复:
9月 20th, 2011 at 09:09
@Kayo, 唔…可以聊一聊
[回复]
11:249月 20th, 2011
我还有继续去了解
[回复]
20:289月 20th, 2011
博主的博客真的很不错呀!
[回复]
11:579月 23rd, 2011
围观技术宅
[回复]
油饼小明猪 回复:
9月 24th, 2011 at 18:56
@lovee, 技术宅在哪?
[回复]
19:029月 30th, 2011
不知道有没有理解错,为什么不把要截取部分保存为临时图片文件呢?
小明猪有看过swfupload吗?他上传是 multipart/form-data 的 enctype ,所以服务器跟普通上传那样只要 $_FILES[“file”] 处理就行了。
[回复]
油饼小明猪 回复:
10月 2nd, 2011 at 20:58
@tojary, 哈哈,你这是一种方法,但是我同事的方法也是很强的,节省了N多的网络流量。
[回复]
20:0112月 27th, 2012
好强大,Mark一下啦~
[回复]