图片与二进制数据

图片的二进制数组(byte[])通常包含图像的原始数据,以特定的格式存储,如JPEG、PNG或BMP。特征包括图像的编码格式、文件头信息、像素数据和可能的压缩信息。不同格式有不同的文件头和数据结构,但本质上都是用来表示图像内容的二进制数据。

可以通过检查二进制数组的文件头(魔术字节)来判断数据格式。每种图片格式(如JPEG、PNG、GIF)都有特定的文件头标识。例如,JPEG以0xFFD8开头,PNG以0x89504E47开头。检查这些魔术字节能帮助你确定数据的格式。

JPEG文件二进制码,参考示例:
在这里插入图片描述
转换成byte[]格式参考为:[-1, -40, -1, -32, 0, 16, 74, 70, 73, 70, 0, 1, 2,……]

PNG文件二进制码,参考示例:
在这里插入图片描述
转换成byte[]格式参考为:[-119, 80, 78, 71, ……]

在处理二进制数据时,-119 和 -1 是用来表示字节值的特定的十进制数值,这些值是从原始的二进制数据转换而来的。

为什么出现负数值?
计算机系统中的字节通常以 byte 类型存储,字节的取值范围是 0 到 255。但在许多编程语言中,byte 类型的值可以被解释为有符号整数,这样在处理数据时负值会出现。具体来说:

-119 在有符号的 byte 数据类型中,等价于 1370x89),这是PNG图像格式的标识符之一。
-1 在有符号的 byte 数据类型中,等价于 255 (0xFF),这是JPEG图像格式的标识符之一(JPEG文件以 0xFFD8 开头)。
如何判断数据格式
获取魔术字节:读取二进制数据的前几个字节来检查文件头。例如:

PNG 文件的前几个字节是 0x89 50 4E 47
JPEG 文件的前几个字节是 0xFF D8
GIF 文件的前几个字节是 0x47 49 46 38(GIF89a)。
转换负值:如果你的编程语言或工具以有符号的 byte 处理数据,你可能需要将负值转换为其无符号的对应值。例如:

在Java中,byte 类型的 -119 实际上表示无符号的 137,可以通过 (byte) -119 & 0xFF 转换为 137
示例代码:

// Java示例代码:读取并检查图像文件的头部
FileInputStream fis = new FileInputStream("image.png");
byte[] header = new byte[8];
fis.read(header);
fis.close();

// 检查PNG头
if (header[0] == (byte) 0x89 && header[1] == (byte) 0x50 &&
    header[2] == (byte) 0x4E && header[3] == (byte) 0x47) {
    System.out.println("这是PNG图像文件");
}

通过这种方式,你可以根据文件头的信息来判断二进制数组的图像格式。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值