我之前做相片的一些处理,Mac下购买了一款专门处理图片的软件,如果是windows下,就用PS直接处理,当然,我做的都是一些简单的处理,比如图片的宽度比例、像素大小控制在合理范围内如1000k内等,如果相片图片多的话,会用到批处理功能。
但是,前几日的时候,我当时手上刚好没有现成的软件工具,而手上有一批近百张的相片图片要处理下,处理也挺简单,但是,如果逐个去处理的话,我算了下时间,估计差不多1个小时了。
犹豫了大约一分钟,我忽然想到,如果能自己做一个专门批处理图片的工具,每次让它按照我的要求,自动处理好,节省时间,节省精力,不美吗?
嗯,说干就干,我很快想到写一个程序专门用来处理。至于用哪种语言,自然是我去年开始新学习的编程语言python了。
如果像往常一样靠自己去琢磨和全人工编程的话,我估计得耗费至少一天时间,还不一定能做的完美,于是我很快想到了用AI 大模型GPT来 辅助帮我完成这个任务。
我用的是chat GPT 4o,这个也是最近刚出来的,编程效果还是不错的。
我提出了我的需求,如下:
用python写个程序,用来批处理图片,要求处理后的图片,宽度1280 pm或以内,高度随宽度等比例自适应调节,处理后的图片每张大小控制在1M内,文件格式为.png格式,要求图像不能失真,适合网页上查看,处理后的图片,统一放在当前文件夹下的新文件夹newfold下。
将图片处理成我要求的格式和宽度等,并统一存放到新文件夹 newfold 下。
因为每次的图片文件夹都不相同,于是我提出要求,
每次运行时,要先指定所要处理图片的文件夹路径地址
GPT很快给了我新的程序代码,如下图,
newfold不好记,容易搞错,我提出新的要求:
newfold 文件夹名称改为当天的日期
GPT给出了代码如下图,
我按照它给出的代码,在本地环境下运行测试了下,发现不行,出错了,
我告诉它:
运行时,出现如下错误:
Exception has occurred: AttributeError module 'PIL.Image' has no attribute 'ANTIALIAS' File "E:\git\coze\imagesbatch.py", line 24, in process_image
它很快告诉了我问题的原因:
从Pillow 10.0.0版本开始,Image.ANTIALIAS已被移除。你可以使用Image.LANCZOS作为替代,它的效果与Image.ANTIALIAS相同。下面是修正后的代码:
在这段代码中,已经将Image.ANTIALIAS替换为Image.LANCZOS。Image.LANCZOS是一种高质量的重采样过滤器,适用于缩放图像时保持图像质量。这样可以避免AttributeError问题。
我继续提要求,如下,
将图片的文件名按照当日日期按顺序重新命名,类似格式 dd_001.png ,其中dd为当天日期
这次再运行代码,尝试开始批处理图片,但是,卡主了,估计是单线程原因,处理很有限。
处理图片时卡主了
GPT告诉我原因:
处理图片时卡主的原因可能是因为调整质量以控制文件大小的过程中出现了无限循环。为了避免这种情况,可以限制调整质量的循环次数,并逐步降低质量。下面是修改后的代码:
为了避免长时间处理但没有任何状态提示,我提出了新的要求,让它完善下,这样我就能看到正在处理中的状态,和已经完成好的信息等。
每处理完一张图片,要显示其状态,如正在处理图片xxx中,原图文件名xxx,大小xxM,处理完成,新图片名已命名为yyy.png 大小xx M
这次运行后,速度还是很慢,我给它继续提了3个问题:
有3个问题:
1、这个程序处理图片的速度太慢了
2、处理生成后的图片,大小必须控制在1000k内
3、如果遇到错误,则先记录下来,自动跳过,待程序完成后,再显示 已处理成功XX张,失败XX张
GPT给到新的代码,
悲催的是,到这里时,提示我当天的gpt 4o使用达到当日上限,被切换到了3.5版本。
那怎么行?3.5比起4o智商差远了。
这也难不倒我,换个平台,用coze.com 下的的免费gtp4o,无限流量。
在使用coze.com的gpt4o之前,我先做了个机器人bot :编程高手,要求它如下:
角色
你是一个编程专家,拥有丰富的编程实战经验。你擅长理解用户的需求,并能够结合用户的要求,开发出满足需求的程序代码。
技能
技能1:需求理解
- 和用户进行交流,深入理解用户的需求和期望。
- 分析用户给出的需求描述和目标,制定合适的开发计划。
技能2:编写代码
- 根据用户的需求和计划,编写高效、稳定、易用的代码。
- 使用最佳的编程规范和原则进行代码开发,保证代码的质量和效率。
技能3:调试和优化
- 对编写的代码进行严格的测试和调试,确保程序能够稳定运行。
- 根据测试和反馈,对代码进行优化和改进,使得代码更加完善。
限制
- 仅讨论与编程相关的话题。
- 坚持使用提供的输出格式。
- 确保源代码符合用户的需求和期望。
- 一旦发现不符合需求或存在错误的地方,积极修复并调整。
接下来就正式继续使用,我把刚才做好的半成品代码发给它,要这个编程高手帮我完善。
这次测试后,发现生成后的图片,没完全按照我的意思去做,大小超过1M了。
我告诉他,
不对呀,生成后的每张图片大小必须要小于1000KB(即1MB)
继续提要求,完善这个程序,
生成后的图片命名格式为:mm_dd_001.jpg 其中mm 为当前月份,dd为当天日期,001 是按照序列顺序增长
哇!这次很快处理好,图片都统一放在新的文件夹下,而且重新帮我命名,每个图片大小也符合要求控制在1000k内,并且图片也尽可能保持原来的清晰度。
但是,还有个小瑕疵,我发现生成后的个别图片,倾斜了,要调整90度后才可以。
于是,我再次告诉它,
生成后的部分图像倾斜了
新的代码完全解决了这个小瑕疵,真棒!
最后,我让它给每次处理再加上时间,这样我们能知道处理花费的具体时间。
大功告成!代码测试通过!
完整的代码我放到了github上,完整代码猛击这里查看
嗯,我认为当下的AI,几乎可以代替绝大部分的人工编程了,不仅能胜任,而且还非常高效、高质量,比如我这个工具,前后大概花了我二十分钟时间。