·
#include __FILE__

其实你仔细看我的两条回复以及她的回复,我并没有否定他的方案,简单的处理图片使用Pillow一点问题都没有,复杂点的可以使用OpenCV,要是让我给出的代码无非也就是在他基础上改改,我比较在意的是代码规范上,我最早提到了list的问题,他在第二次并没有改掉,说明他不是很在意这个问题所以我就强调了一次,以及我提到的几个问题他似乎都不是很在意,也没有要和我讨论的意思

实际上是基于这样一个假设,假如只有一张图片需要转换,那么他的代码使用起来不会有太大问题,即便有问题看一下就能解决,但是如果把这个规模提升到1000张甚至10000张,那他的代码大概率会出问题,无论在性能还是在效果上,我仅仅试了一下一个文件嵌套一个同名文件他的程序就失效了

我觉得一个新手朝着这样的方向去思考是比较好的,一方面提高解决问题的能力,另一方面学习编程语法,或者直接做一个更简单的程序(模块),仅接收单个图片地址,做更多的参数预设,并且接收自定义参数...

我的一些想法都是基于我过去的编程经验,我踩过无数的坑,或许没有踩过的坑让他们踩一踩也是好的,毕竟“纸上得来终觉浅,绝知此事要躬行”

Replies
5

抱歉,我确实只是个初学者,你看看我的新帖子,那么写行吗

挺好的,借助了glob避免手动遍历失误,不过你其中有些代码是多余的

  • path.join()并没有外来参数,可预知结果,手动拼接即可
  • img.load()忽略了返回值没有起到作用可以直接删除

所以在忽略代码格式化的情况下(不符合pep8之类的),我可以写出一个非常短的版本 ,而作用和你这个一样

import glob,PIL.Image,os

list(map(lambda f:(PIL.Image.open(f).save(f[0:-5] + ".jpg"),os.remove(f)),glob.glob('./*.webp')))

然后稍微改一下glob的参数就能递归到文件夹里面去,"./**/*.webp"

所以没什么好在意代码行数的,你应该做的是继续完善这个程序,比如可以输入一些选项控制输出的格式实现多种多样的的不同格式之间的图片转换

这里我有一个地方不懂,使用list(map(lambda))和for有什么区别,请教一下

哈哈,这里这样用区别不大,所以才直接简写的,有一些功能比较简单比较短小的我都会用map替代for,最主要的区别可能是map产生一个懒序列,加上list之后就直接作用到每一个元素上了

明白了