最近发现电脑使用暗色系主题时能挺大程度上缓解用眼疲劳的,因此就给平时最常用的markdown编辑器换了个暗色主题
不过对于文字内容来说更换配色很简单,但是图片就比较麻烦了,更改颜色不方便
黑底白字的界面上强塞入这么大一个白色图片,简直逼死强迫症啊!
因此打算写一个小脚本,来实现把源图片拖拽到某个处理程序上就能自动转换为黑色系。
不过针对特定颜色进行更改好像有点麻烦而且效果不是很好。比如识别某个像素的RGB值在白色区间内时,就全部改为(0,0,0)?使用这种暴力阈值法处理低分辨率图片的图像轮廓边缘会很糟糕。
因此不如使用“负片”的效果,只是对颜色进行更改,不会丢失信息。
由于python脚本在windows中本身不支持“把文件拖拽到脚本上作为执行参数”,但是bat脚本是支持的,因此可以把待处理图片拖拽到bat脚本上来读取图片路径,然后再bat脚本再调用python脚本,并把刚才的图片路径作为python脚本的执行参数,达到“间接拖拽”的效果
将文件拖拽到我上以处理为负片.bat
:
:: 写上这条指令,不然执行bat时会把下列的每条指令都打在公屏上 @echo off :: %*代表的是拖拽到bat脚本上的所有文件的集合,最好把这个值保存在变量里,不然待会调用函数的时候再使用%*好像值就不一样了? set dragged_items=%* :: %0代表的是该文件本身所在的地址,如C:\Users\CSD\Documents\Enote_database\__batch_processor__\将图片啥啥啥.bat set LocalPath=%0 :: 这是在调用下面那个execute_python_script函数,参数就为刚才设置的LocalPath call :execute_python_script %LocalPath% :: 显示一行“按下任意按钮以继续...” :: pause :execute_python_script :: 下面的等号后边写同级目录中那个python脚本的名称 set python_script=invertPICS.py :: 这是把刚才批处理脚本自身的 文件地址 中的自身名称(将图片啥啥啥.bat)给删掉了,剩下一个路径,然后把python脚本的路径跟它的路径拼接起来,就变成python脚本的路径了 :: (当然前提肯定就是你得把python脚本和bat脚本放在一个目录下啦=_=) set file_path=%~dp1%python_script% :: 最后,终于可以执行python脚本了,参数就是刚才拖拽到bat上的那些文件 python %file_path% %dragged_items%
invertPICS.py
:
import sys import cv2 as cv pic_extensions = [".png", ".jpg"] file_paths = sys.argv[1:] print(file_paths) for Pic in file_paths: for pic_extension in pic_extensions: if str(Pic).endswith(pic_extension): Pic_data = cv.imread(Pic, 1) # cv.imshow("preview", Pic_data) # cv.waitKey(3000) try: test = Pic_data.shape[0] Pic_data = 255 - Pic_data cv.imwrite(Pic, Pic_data) except AttributeError: # OpenCV的imread不支持中文路径 print(">>Error! you'd gotta use a pure English filename!") break