所有的图片格式

1. JPEG/JPG

  • 特点:有损压缩、体积小、不支持透明、在压缩率不高时保留的细节还不错。

  • 使用场景:颜色丰富的照片,JPG是通用的选择,如大的背景图、轮播图或Banner图。

2. PNG

  • 特点:无损压缩、质量高、体积大、支持透明。

  • 使用场景:透明图片的业务场景,如小的Logo、颜色简单且对比强烈的图片或背景。

3. SVG

  • 特点:文本文件、体积小、不失真、兼容性好、无需多端、多分辨率适配、较强的交互特性、渲染成本比较高。

  • 使用场景:图片色彩相对简单的业务场景。

4. Base64

  • 特点:文本文件、依赖编码,Base64编码后,图片大小会膨胀为原文件的4/3

  • 使用场景:小图标(<8KB)解决方案。

5. WebP

打开淘宝网,假如你是chrome浏览器,你会发现,所有图片都是webp结尾的,淘宝网图片运用了webp。假如你是safari浏览器,看到图片就是jpg或者png了,淘宝网自动判断浏览器支持不支持webp,假如支持,则输出相应的图片格式!

  • 特点WebP图片是一种新的图像格式,由Google开发。与pngjpg相比,相同的视觉体验下,WebP图像的尺寸缩小了大约30%。另外,WebP图像格式还支持有损压缩、无损压缩、透明和动画,但有兼容性问题。

  • 使用场景:图片占较大的商场类网站,目前GoogleFacebookebay、淘宝、腾讯、美团等已经在用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: 可以使用以下步骤来判断文件所有图片格式文件类型: 1. 定义一个包含所有图片格式文件类型的数组,比如 { "jpg", "jpeg", "bmp", "png", "gif" }。 2. 打开文件,使用 fopen 函数和 "rb" (二进制读取) 模式来打开,例如: FILE* file = fopen("example.jpg", "rb"); 3. 读取文件前面几个字节(通常是文件头),根据文件头的不同,可以用文件头来判断文件类型。例如,JPG 文件的文件头是 "FF D8",PNG 文件的文件头是 "89 50 4E 47 0D 0A 1A 0A"。 4. 根据文件头判断文件类型,可以使用 memcmp 函数来比较字节数组,例如: unsigned char header[8]; fread(header, sizeof(unsigned char), 8, file); if (memcmp(header, "\xFF\xD8", 2) == 0) { // JPG 文件 } else if (memcmp(header, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8) == 0) { // PNG 文件 } // 其他文件类型类似 5. 关闭文件,使用 fclose 函数关闭文件,例如: fclose(file); 下面是示例代码: ``` #include <stdio.h> #include <string.h> int is_image_file(const char* filename) { FILE* file = fopen(filename, "rb"); if (!file) { return 0; } unsigned char header[8]; fread(header, sizeof(unsigned char), 8, file); fclose(file); const char* exts[] = { "jpg", "jpeg", "bmp", "png", "gif" }; const char* headers[][2] = { { "\xFF\xD8", "\xFF\xD9" }, // JPG/JPEG 文件头和尾 { "\x42\x4D", NULL }, // BMP 文件头 { "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", NULL }, // PNG 文件头 { "\x47\x49\x46\x38\x37\x61", "\x47\x49\x46\x38\x39\x61" }, // GIF87a/GIF89a 文件头和尾 }; const size_t num_exts = sizeof(exts) / sizeof(exts[0]); const size_t num_headers = sizeof(headers) / sizeof(headers[0]); size_t i, j; for (i = 0; i < num_exts; i++) { if (strstr(filename, exts[i])) { for (j = 0; j < num_headers; j++) { if (memcmp(header, headers[j][0], strlen(headers[j][0])) == 0 && (!headers[j][1] || memcmp(header + 2, headers[j][1], strlen(headers[j][1])) == 0)) { return 1; } } break; } } return 0; } int main() { const char* filename = "example.jpg"; if (is_image_file(filename)) { printf("%s is an image file.\n", filename); } else { printf("%s is not an image file.\n", filename); } return 0; } ``` 注意:以上代码只是一个示例,可能会有一些特殊情况没有考虑到,需要在实际使用中进行测试和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值