用 chevereto 图床的小伙伴快进来,有福利~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fffflyfish
V2EX    Python

用 chevereto 图床的小伙伴快进来,有福利~

  •  
  •   fffflyfish
    FormatFish 2017-01-02 18:06:29 +08:00 11659 次点击
    这是一个创建于 3211 天前的主题,其中的信息可能已经有所发展或是发生改变。

    嗯,今天本来想好好学习别人的代码的,突然看到 requests 模块,想想貌似这模块很常用的说,我竟然没用过,于是我就找了下文档看了下,嗯,光看不练是不对的,然后我就想做点什么,突然想到我每次写 hexo blog 的时候,每次要把图片截取保存到本地,然后上传到我的图床,然后拷贝链接, OMG 好烦啊,于是发现这篇文档 , 是时候造个轮子了。

    下面是代码

    #coding=utf-8 import requests import json import mimetypes from PIL import ImageGrab import datetime def upload(files): APIKey = "YOUR API KEY" format = "json" url = "http://domain.com/api/1/upload/?key="+ APIKey + "&format=" + format #files = r = requests.post(url , files = files) return json.loads(r.text) def formatSource(filename): imageList = [] type = mimetypes.guess_type(filename)[0] imageList.append(('source' , (filename , open(filename , 'rb') , type))) print imageList return imageList if __name__ == "__main__": print "将图片截图或复制到剪切板中即可~~, ctrl+z 结束" recentVal = None while(True): tmpValue = ImageGrab.grabclipboard() if recentVal != tmpValue: recentVal = tmpValue now = datetime.datetime.now() now = now.strftime("%Y-%m-%d %H:%M:%S") filename = 'IMG'+ now + '.png' if recentVal is not None: recentVal.save(filename, 'png') #filenames.append(filename) #recentVal = None print filename jsOnData= upload(formatSource(filename)) if jsonData['status_code'] != 200: print "error: " , jsonData['error']['message'] print "status code : " , jsonData['status_code'] else: print "orignal url: " , jsonData['image']['display_url'] print "thumb url: " , jsonData['image']['thumb']['url'] 

    运行示例

    示例

    有点慢啊,因为我的服务器在国外~~

    使用方法

    将你的 chevereto 的 API key 拷贝到对应位置,替换 domain.com 为你自己的域名,嗯,就这样,这只是练习代码,难免有些 bug ,你懂得

    其实讲道理用curl就可以弄的,但是我不会把本地的图片传到服务器上,据说要base64编码~~~sad

    嗯,开年第一个轮子,大家新年快乐!

    18 条回复    2017-10-10 15:37:21 +08:00
    Showfom
        1
    Showfom  
    PRO
       2017-01-02 18:19:00 +08:00 via iPhone
    可以加上 sm.ms 图床嘛 嘻嘻
    misaka19000
        2
    misaka19000  
       2017-01-02 18:22:15 +08:00
    挺有意思的,赞一个
    lyanforever
        3
    lyanforever  
       2017-01-02 18:29:51 +08:00
    等我有了图床
    fffflyfish
        4
    fffflyfish  
    OP
       2017-01-02 18:38:20 +08:00
    @Showfom

    ```py
    #coding=utf-8
    import requests
    import json
    import mimetypes
    from PIL import ImageGrab
    import datetime

    def upload(files):
    APIKey = "YOUR API KEY"
    format = "json"
    #url = "http://domain.com/api/1/upload/?key="+ APIKey + "&format=" + format
    url = "https://sm.ms/api/upload?ssl=False&format=json"
    #files =
    r = requests.post(url , files = files)

    return json.loads(r.text)

    def formatSource(filename):
    imageList = []
    type = mimetypes.guess_type(filename)[0]
    imageList.append(('smfile' , (filename , open(filename , 'rb') , type)))
    print imageList
    return imageList

    if __name__ == "__main__":
    print "将图片截图或复制到剪切板中即可~~, ctrl+z 结束"
    recentVal = None
    while(True):
    tmpValue = ImageGrab.grabclipboard()
    if recentVal != tmpValue:
    recentVal = tmpValue
    now = datetime.datetime.now()
    now = now.strftime("%Y-%m-%d %H:%M:%S")
    filename = 'IMG'+ now + '.png'
    if recentVal is not None:
    recentVal.save(filename, 'png')
    #filenames.append(filename)
    #recentVal = None
    print filename
    jsOnData= upload(formatSource(filename))

    if jsonData['code'] != "success":
    print "error: " , jsonData['msg']
    print "status code : " , jsonData['code']
    else:
    print "url: " , jsonData['data']['url']
    #print "orignal url: " , jsonData['image']['display_url']
    #print "thumb url: " , jsonData['image']['thumb']['url']
    ```

    临时改了改,亲测可以用
    fffflyfish
        5
    fffflyfish  
    OP
       2017-01-02 18:39:32 +08:00
    回复不支持 markdown 吗。。。。
    fffflyfish
        6
    fffflyfish  
    OP
       2017-01-02 19:11:19 +08:00
    Showfom
        7
    Showfom  
    PRO
       2017-01-02 19:33:18 +08:00
    zrj766
        8
    zrj766  
       2017-01-02 21:18:04 +08:00
    好东西,研究下
    mingyun
        9
    mingyun  
       2017-01-02 23:29:53 +08:00
    buseni
        10
    buseni  
       2017-06-22 14:05:11 +08:00
    怎么实现的呢,怎么可以上传到别的网站上面呢,我现在发现上传到自己网站图片太大了
    tianwm
        11
    tianwm  
       2017-08-28 23:01:45 +08:00
    @buseni 看来要别人的 api 给你
    qcloud
        12
    qcloud  
       2017-10-10 13:49:08 +08:00
    emmm 没有 mac
    fffflyfish
        13
    fffflyfish  
    OP
       2017-10-10 14:41:08 +08:00
    @qcloud windows 上有 sharex 可以直接配置,linux 的 Mac 的方式一样
    qcloud
        14
    qcloud  
       2017-10-10 15:04:52 +08:00
    @fffflyfish #13 咦,你居然在呢,这个...chevereto 你知道怎么自定义图片的尺寸吗?
    fffflyfish
        15
    fffflyfish  
    OP
       2017-10-10 15:19:57 +08:00
    @qcloud 自定义图片尺寸?不是上传一张图片就可以得到这张图片的多个尺寸的链接吗?如果是自定义这个尺寸的话“仪表盘”的“图片上传”里可以定义
    qcloud
        16
    qcloud  
       2017-10-10 15:21:22 +08:00
    @fffflyfish #15 嗯,这个我看过了,但是对于我的问题似乎无解-.-,这个图片可以自定义吗?我的意思是,每张图片上传的路径是不一样
    fffflyfish
        17
    fffflyfish  
    OP
       2017-10-10 15:32:30 +08:00
    @qcloud 路径不都是默认上传到 images 目录下吗?我还是没理解你图片自定义的意思,你的意思是 chevereto 的“图片上传”里自定义图片尺寸这个功能不能用吗?
    qcloud
        18
    qcloud  
       2017-10-10 15:37:21 +08:00 via iPhone
    @fffflyfish 能用但是不适合我的需求
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     960 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:11 PVG 03:11 LAX 12:11 JFK 15:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86