11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 1309|回复: 5
上一主题 下一主题

[AS 开发 & 技巧] 根据文件头信息判断图片真实类型(AS3)

[复制链接] TA的其它主题
发表于 2021-8-16 11:44:22 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 TKCB 于 2021-8-16 15:42 编辑

干货干货,flash里面获取文件后缀,.type还真是后缀,哪怕披了羊皮的狼,它都说是羊来着,所以还得0,1,0,1

import flash.utils.ByteArray;

private function getFileType(fileData : ByteArray) : String {
                        var b0 : int = fileData.readUnsignedByte();
                        var b1 : int = fileData.readUnsignedByte();
                        fileData.position = 0;
                        var fileType : String = "unknown";
                        if(b0 == 66 && b1 == 77) {
                                fileType = "BMP";
                        }else if(b0 == 255 && b1 == 216) {
                                fileType = "JPG";
                        }else if(b0 == 137 && b1 == 80) {
                                fileType = "PNG";
                        }else if(b0 == 71 && b1 == 73) {
                                fileType = "GIF";
                        }
                        return fileType;
}

不知道有效没有。去测试测试告诉我吧。哈哈
出自:https://www.cnblogs.com/walkerdennis/p/4971605.html


TKCB-GO:我顺手做了练习demo,分享给大家
根据二进制头部数据,判断图片真实格式(BMP、JPG、PNG、GIF).zip (23.94 KB, 下载次数: 1)

评分

参与人数 1银子 +20 金子 +1 贡献 +2 收起 理由
TKCB + 20 + 1 + 2 11RIA 闪客社区,就是这么专业

查看全部评分

 楼主| 发表于 2021-8-16 11:51:22 | 显示全部楼层
诺,这个是百分百的行的,上面的那个就来个人测试测试吧。
var f:FileReference=new FileReference();
f.addEventListener(Event.SELECT, filesSelectHandler);
f.addEventListener(Event.COMPLETE, securityTypeHandler);
selectButton.addEventListener(MouseEvent.CLICK,browseHandler);
function browseHandler(event:MouseEvent):void{
        f.browse(new Array(new FileFilter("图片", "*.jpg;*.png")))
}
function filesSelectHandler(event:Event):void{
        f.load();
}
function securityTypeHandler(event:Event):void{
        var t:ByteArray = event.target.data;//获得文件二进制流
        var name:String = event.target.name;//获得文件名称
        var type:String = event.target.type;//获得后缀名称
        var tnum:String = String(t.readUnsignedShort());//读取文件一个16位的整
        var results:String;
        trace(tnum)
        //35152 png
        //65496 jpg
        if(tnum=="65496"){
                results=",是一个jpg图片。";
        }else if(tnum=="35152"){
                results=",是一个png图片!";
        }else{results=",并不是一个jpg或png图片!";
               
        }
        txt.text="您选择的"+name+results;
}
回复

使用道具 举报

发表于 2021-8-16 14:24:24 | 显示全部楼层

【11RIA 闪客社区,评分公示】:
是否有价值:良好(银子 +20  贡献 +2)
是否原创:是(金子 +1)
是否翻译:否
如对自己的评分有疑问,则咨询版主、管理员等。
回复

使用道具 举报

发表于 2021-8-16 15:21:26 | 显示全部楼层
学习了
回复

使用道具 举报

发表于 2021-8-16 15:24:20 | 显示全部楼层
亲自测试,可以的
两个都可以
回复

使用道具 举报

发表于 2021-8-16 23:42:16 | 显示全部楼层
b0 == 255 && b1 == 216,和两个Byte合成一个unsignedShort的结果 65496是等价的
同理,137和80合起来就是35152
可以做如下测试:
[Actionscript3] 纯文本查看 复制代码
trace(255<<8|216);
trace(137<<8|80);

结果:
65496
35152

从代码简洁的角度还是1楼发的代码好一点,二楼转成String再比较有点莫名其妙。
原理肯定是根据图片文件的格式分析得来的了,我只简单看过jpg和png的,另外两种没研究。

是很实用的代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表