2

更好的写脚本方式

 1 year ago
source link: https://scottyeung.top/2023/better-script-with-fsharp/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

更好的写脚本方式

 2023.6.30 2023.6.30  Posts  

毕业季和同学去拍了一些照片,后面共享回来的照片,格式是 HEIC 格式的,在电脑上可以直接打开,但是 iCloud 相册里面上传照片只支持 jpg 格式,哪怕这些照片就是用 iPhone 拍的,也不能直接上传,没有办法,只能够手动转一次照片格式。 网上也有很多 HEIC 转 JPG 格式的工具网站,但是都只能够一张张上传,然后一张张下载,这对于需要处理较大量照片的情况显然并不是一个好的解决方案。于是自然打算写个脚本,进行转换。

当然现在有了 ChatGPT,写脚本都不用亲历亲为了,直接把问题抛给它,我们只需要做代码的搬运工。

202306301213820.png

看起来很不错,复制到本地,替换一下路径一跑,发现脚本并不能正常运行,原因是使用的 Pillow 库其实不支持 HEIC 格式的图片。继续把问题交给它,它又给我推了一个 pyheif 库来处理,然而这个库需要 MSVC 相关工具链来编译安装,在我的电脑安装总是失败,后面尝试了几个它推荐的依赖库,都安装不了,寄!被 Python 的跨平台安装构建的低移植性狠狠教训,而为了写个脚本专门去配个环境或者容器又太夸张了。

于是最近在学的 F#来代替,继续把问题交给 ChatGPT,来回复制粘贴代码运行尝试几次后,顺利完成任务。

#r "nuget:Magick.NET-Q16-AnyCPU"

open System.IO
open ImageMagick

let convertHEICtoJPG (inputPath: string) (outputPath: string) =
    let image = new MagickImage(inputPath)
    image.Format <- MagickFormat.Jpg
    image.Write(outputPath)

// 获取当前目录下的所有 HEIC 文件
let heicFiles = Directory.GetFiles(@"/path/to/you", "*.heic")

// 遍历每个 HEIC 文件,并进行转换
for heicFile in heicFiles do
    let jpgFile = Path.ChangeExtension(heicFile, ".jpg")
    convertHEICtoJPG heicFile jpgFile
    printfn "转换完成:%s -> %s" heicFile jpgFile

对比于 Python,使用 F#来写脚本其实也足够简单和方便,可以单个 fsx 文件来写,也可以直接把写好的代码复制到 fsi 交互命令行里逐段代码执行,方便得很。尤其是对于有外部依赖库的脚本代码,使用 F#或者 C#的脚本,这样一行代码引用依赖库,可比在命令行中全局安装一个依赖好用得多。(起码不会有安装失败的问题)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK