jpeg/png转RGB565或ARGB1555的python脚本

这段代码展示了如何使用Python和PIL库将PNG或JPG图片转换为RGB565和ARGB1555格式,并保存到二进制文件中。通过位移和位运算处理像素颜色,适配小端存储的格式。转换过程中考虑了颜色位数的压缩和透明度处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是RGB565参考这个
https://blog.youkuaiyun.com/byhook/article/details/84262330

#!/usr/bin/python
import os,sys,struct
from PIL import Image
# 图片(jpg/png)转ARGB1555
def main():
	infile = "1.png"
	outfile = "res.bin"
	im=Image.open(infile)
	im.show()
	print("read %s\nImage Width:%d Height:%d" % (infile, im.size[0], im.size[1]))
	f = open(outfile, "wb")
	pix = im.load()  #load pixel array
	for h in range(im.size[1]):
		for w in range(im.size[0]):
			R = pix[w, h][0] >> 3
			G = pix[w, h][1] >> 3
			B = pix[w, h][2] >> 3
			# argb第一位要是1,才是不透明,是0则是全透明
			argb = (1 << 15) | (R << 10) | (G << 5) | B
			# 转换的图是小端的,所以先后半字节,再前半字节
			f.write(struct.pack('B', argb & 255))
			f.write(struct.pack('B', (argb >> 8) & 255))
	f.close()
	print("write to %s" % outfile)
if __name__ == "__main__":
	sys.exit(main())

#!/usr/bin/python
import os,sys,struct
from PIL import Image

# 图片(jpg/png)转RGB565
def main():
	infile = "1.jpg"
	outfile = "res.bin"
	im=Image.open(infile)
	im.show()
	print("read %s\nImage Width:%d Height:%d" % (infile, im.size[0], im.size[1]))

	f = open(outfile, "wb")
	pix = im.load()  #load pixel array
	for h in range(im.size[1]):
		for w in range(im.size[0]):
			R = pix[w, h][0] >> 3
			G = pix[w, h][1] >> 2
			B = pix[w, h][2] >> 3
			rgb = (R << 11) | (G << 5) | B
			# 转换的图是小端的,所以先后半字节,再前半字节
			f.write(struct.pack('B', rgb & 255))
			f.write(struct.pack('B', (rgb >> 8) & 255))

	f.close()
	print("write to %s" % outfile)

if __name__ == "__main__":
	sys.exit(main())

<think>好的,用户的问题是想了解如何通过编程方法工具进行图片格式换。首先,我需要回忆一下之前提供的引用内容,看看有哪些相关的工具方法被提到过。引用[1]提到了在线工具ImageOnline,引用[2]提到了Windows的画图工具,引用[3]提到了Lvgl_image_convert_tool和Python,引用[4]是FFmpeg用于视频换,不过可能也支持图片处理,引用[5]是Codelf,看起来和变量命名相关,可能不直接相关,但暂时先不考虑。 接下来,用户的需求是编程方法工具,所以重点应该放在编程相关的解决方案上。首先想到的是Python的Pillow库,这是常用的图像处理库,引用[3]也提到了使用Python。另外,引用[3]提到的Lvgl_image_convert_tool可能是一个专门用于换图像格式以适应LVGL库的工具,但用户可能需要更通用的方法。 然后,考虑FFmpeg,虽然主要是处理视频,但也能处理图像序列,可能可以用来换图片格式。引用[4]提到FFmpeg的各个模块,可能需要具体命令示例。 另外,在线工具如ImageOnline(引用[1])和画图工具(引用[2])虽然方便,但用户可能更倾向于编程方法,所以这些可以作为补充选项,但可能不是主要回答内容。 需要确保回答结构清晰,分点列出不同的方法,比如编程方法(Python、FFmpeg命令行)、专用工具(Lvgl_image_convert_tool)、在线工具和系统自带工具。每个方法给出具体步骤代码示例,并引用对应的引用来源。 还要注意用户提到的格式换可能包括常见格式如PNGJPEG、AVIF等,需要涵盖这些。例如,引用[1]提到AVIFPNG的方法,可能需要特别说明。 另外,检查是否需要考虑不同编程语言,但用户没有特别指定,所以以Python为例比较合适,因为引用[3]提到了Python,而且Pillow库广泛使用。 总结步骤: 1. 使用Python的Pillow库进行换,提供代码示例。 2. 使用FFmpeg命令行工具处理图像,特别是视频引用中的方法是否适用于图片。 3. 介绍Lvgl_image_convert_tool,说明其用途和如何使用。 4. 补充在线工具和系统工具,如ImageOnline和画图工具。 5. 确保每个部分引用正确的来源,比如引用[3]对应Python和Lvgl工具,引用[4]对应FFmpeg,引用[1]和[2]对应在线和系统工具。 需要验证FFmpeg是否适合图片换,查证后发现FFmpeg可以处理图像序列,例如将一系列图片换为视频,但单个图片换可能不是最佳选择,不过仍有相关命令,比如: ffmpeg -i input.jpg output.png 这可能是一个简单的用法,可以包含在回答中。 另外,Lvgl_image_convert_tool的具体使用方法可能需要更多细节,但引用[3]提到它支持颜色模式换和缩放裁剪,用户可能需要安装和运行的步骤,比如通过Python脚本。 最后,确保回答符合用户要求的结构,分点说明,代码用正确格式,引用标识正确添加,例如Python部分引用[3],FFmpeg引用[4]等。</think>### 图片格式换方法与工具详解 #### 一、编程方法实现 1. **Python Pillow库** Python的Pillow库是最常用的图像处理库之一,支持JPEGPNG、GIF、BMP、AVIF等格式换。 ```python from PIL import Image # 打开AVIF文件(需安装avif插件) img = Image.open('input.avif') # 换为PNG格式 img.save('output.png', format='PNG') ``` 注意:AVIF格式需安装`pillow-avif-plugin`扩展包[^3]。 2. **FFmpeg命令行工具** FFmpeg不仅用于视频处理,也可换单张图片格式: ```bash ffmpeg -i input.jpg output.png ``` 支持批量换(如将文件夹内所有JPEG为WebP): ```bash ffmpeg -pattern_type glob -i "*.jpg" -c:v libwebp -qscale 80 "%03d.webp" ``` 该方法适合处理高分辨率图片需要压缩的场景[^4]。 #### 二、专用工具推荐 1. **Lvgl_image_convert_tool** 专为嵌入式开发设计的工具,支持RGB565ARGB8888等硬件友好格式: ```bash python lv_img_convert.py -i input.png -o output.bin -f RGB565 -r 320x240 ``` 支持裁剪、缩放等操作,适配不同屏幕需求[^3]。 2. **ImageMagick命令行** 跨平台图像处理工具,支持200+格式互: ```bash convert input.heic output.avif # HEICAVIF mogrify -format webp *.png # 批量PNGWebP ``` #### 三、快速换方案 1. **在线工具** - [ImageOnline](https://image.online-convert.com):支持AVIF、JPEG XL等新兴格式,可直接调整压缩率[^1] - [CloudConvert](https://cloudconvert.com):API接口丰富,适合集成到开发流程 2. **系统自带工具** - Windows画图工具:打开图片后另存为其他格式(如BMPPNG)[^2] - macOS预览:导出时选择目标格式并调整质量参数 #### 四、关键问题解析 - **AVIF格式兼容性**:需注意目标平台是否支持,换时可保留EXIF数据 - **透明通道处理**:PNG/WEBP支持透明度,JPEG时需填充背景色 - **批量处理优化**:Python多线程FFmpeg并行加速可提升大图集换效率
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值