xiebruce / PicUploader

一个还不错的图床工具,支持Mac/Win/Linux服务器、支持压缩后上传、添加图片或文字水印、多文件同时上传、同时上传到多个云、右击任意文件上传、快捷键上传剪贴板截图、Web版上传、支持作为Mweb/Typora发布图片接口、作为PicGo/ShareX/uPic等的自定义图床,支持在服务器上部署作为图床接口,支持上传任意格式文件。
https://www.xiebruce.top/17.html
MIT License
1.19k stars 169 forks source link

请问有没有考虑过上传剪切板里的图片 #2

Closed najunuoyan closed 5 years ago

najunuoyan commented 5 years ago

如题,很多时候写东西,都是随时截图然后上传的,不知道有没有规划上传剪切板数据的功能

xiebruce commented 5 years ago

@najunuoyan 考虑是考虑过,但目前还不知道怎么写,实现这个没有客户端很麻烦,比如程序怎么知道我截的图要不要上传?因为不可能我截的每一张图都要上传啊,如果靠改配置文件不现实,因为太麻烦了。 又或者,弹窗提示让你选择?Automator里倒是有一个可以让你确认是否上传的功能: image 但是,你怎么监听剪贴板?我在想可不可以用javascript监听,因为Mac的Automator支持Applescript和javascript两种语言,注意这里javascript与网页的有所不同,监听的剪贴板也不是网页上拷贝的,而是Mac系统剪贴板,只有监听剪贴板才能判断剪贴板中的内容,并判断如果这是一个路径,并且这个路径对应的文件是一张图片,那就可以弹出确认框问你是否要上传,当然也可用python来做,不过我目前还不会。

另外一个问题就是,就算你能写好这些功能,但是每截一次图就弹一次框问你要不要上传,这样难道不烦么?反正我觉得我会烦。

解决方式一: 我建议你把“下载”文件夹设置为Finder默认打开的文件夹: image.png

然后截图设置为默认保存到“下载目录”,并且访达默认显示方式为列表方式,并且设置为按时间倒序排序,这样,每次截完一张图,那第这个截图的文件就肯定在最前面,你只要点击一下Docker中的访达图标就可以打开访达,找到第一张图片,右击→上传即可,然后command+tab就可以切回你的markdown编辑器里,这是我采用的方式: screenshot and upload image.gif 按空格预览是为了给你演示确实是这张图片,实际使用的时候,第一张肯定是最新的,只要你本来就设置好按时间倒序,每次打开访达都是一样的按时间倒序的,所以实际操作起来并不需要按空格预览,直接右击上传就可以,然后马上返回到markdown编辑器,等待上传成功就可以粘贴。

解决方式二: 使用Mweb来写markdown,这样你截的图都不用保存成文件,直接command+v粘贴到Mweb即可,整个文章写完之后,再在Mweb里批量上传即可,只不过要支持mweb,本地需要配置一个nginx服务器,我文档里有写的,这个方法估计会更符合你的需求,截完就粘,非常方便,最终发布的时候只要集中一传一次即可,如果有图片需要修改,或者添加了图片,再上传一次即可,已经上传过的不会再上传的: Mweb-upload2.gif

najunuoyan commented 5 years ago

我对Automator不太熟悉,你看下这样技术是否可行: 在Automator中写一个脚本检测剪切板数据是否是图片,如果是图片就上传。然后把这段脚本绑定到一个全局快捷键。用户截图后,如果按了快捷键,脚本就会启动上传,完成后提示用户。

xiebruce commented 5 years ago

@najunuoyan 你这个想法可以是可以,不过我目前还不会写,其实这个东西跟automator无关,我用automator,也只是为了点击右键按钮的时候,触发运行我的脚本并把图片路径传给php而已。其实我认为最好是用OC或swift写一个简单的菜单栏图标程序,类似这种: image 我的想法是,这个菜单栏程序就只要两个菜单,一个是上传截图,另一个是设置(当然也可以再加一个关于),当我们截图后,点击菜单栏图标弹出菜单,再点上传截图即可上传,这样好像也挺方便。点击上传截图后的动作,其实就是调用这一句程序执行php脚本:

/usr/local/bin/php /Users/bruce/www/personal/PicUploader/index.php "$@" | pbcopy

但这里有几个问题: 1、php可执行程序的路径:/usr/local/bin/php 2、PicUploader的index路径:/Users/bruce/www/personal/PicUploader/index.php 3、图片在剪贴板是什么形式存在?

1和2可以在我刚才说的设置按钮里弹出一个窗口,然后在窗口里提供两个输入框让用户设置这两个参数的位置。 而3的话,我个人认为图片在剪贴板中可能是以base64的形式存在吧,如果是这样,传给php后倒是能处理,不过就算不是base64,应该也可以用程序处理成base64,再不行的话最多搞一个临时文件目录,上传完自动删除保存的临时文件,反正肯定都能实现。

另外一个就是,设置界面还要提供一个用于自定义快捷键的位置,这样你喜欢用手点也可以,喜欢按快捷键也可以。

最后就是要判断如果点击上传截图后,识别到剪贴板里的并不是图片,而是文本或其他文件的话,右上角弹一个通知,说一句“剪贴板未检测到图片,无法上传”这样的提示,即可。

功能我都想好了,就差不会写了😄 而且用swift还有一个问题,windows用户没法用。

xiebruce commented 5 years ago

@najunuoyan 已经实现用python监听快捷键,截图后不需要保存图片,直接复制到剪贴板,按快捷键即可上传,只不过目前开机启动未解决,会造成使用不便,比如有些人常关机的,每次都要自己去开启进程,很麻烦,我解决开机启动后再传上来。

如果有兴趣可以看看我遇到的问题:Not working if I start the daemon by launchctl on macOS,或者:Pynput not working if I start the daemon by launchctl on macOS

如果有其他人知道如何解决这个问题,欢迎回答!

xiebruce commented 5 years ago

@najunuoyan 已实现快捷键上传剪贴板中的图片: Mac系统使用快捷键上传方式一 Mac系统使用快捷键上传方式二(配合Alfred) Windows系统使用快捷键上传