前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片折腾的经历——文件批处理、爬虫、图片工具

图片折腾的经历——文件批处理、爬虫、图片工具

作者头像
不愿意做鱼的小鲸鱼
发布2022-11-03 15:41:05
7260
发布2022-11-03 15:41:05
举报
文章被收录于专栏:web全栈

背景

由于很久之前的某一次在抖音上刷到了一个很赞的,分享海贼王壁纸的up主,后面他也经常更新高质量海贼王壁纸的图集,我觉得很赞,因此想自己全部下载保存下来,所以有了这次图片采集的折腾经历。过程大概就是先从某个渠道采集抖音该UP主的图片资源,然后使用shell脚本处理这些图片的名称和快速导入某个文件夹,最后挑选不好的图片删掉。 后来又想到自己搞一个个人的专属图库,就想到使用python爬虫爬取线上壁纸图片,由于技术问题,爬取的这些图片并不是4K图片,因此又折腾图片AI优化转4K,但转出来的图片有些大,最后就进行尽量的无损压缩,最终得到的图片大小竟然和1K的图片大小差不太多,但图片已经是4K,画质也高了不少。因此想把这个折腾的过程记录一下!

图片获取

抖音解析图集

抖音采集使用的抖音采集工具。 下载地址:

代码语言:javascript
复制
aHR0cDovL3Bhbi5xa29uZ3Rhby5jbi8lRTQlQjglQkIlRTclQkQlOTElRTclOUIlOTgvJUU4JUJEJUFGJUU0JUJCJUI2L1BDJUU4JUJEJUFGJUU0JUJCJUI2LyVFNiU4QSU5NiVFOSU5RiVCMyVFOSU4NyU4NyVFOSU5QiU4NiVFNSVCNyVBNSVFNSU4NSVCNy43eg==

这个工具使用很简单,应该稍微看一下就能上手使用了,可以采集某个视频作者的全部作品,包括图集,具体就不多介绍。

另外如果想去水印解析单个作品,则可以使用下面的工具: 工具一 工具二

抖音采集后的目录大概是这样子

每个图集作品的结构如下

图片整理(Linux批量文件处理)

这样就会有一个问题,好几十个图集文件夹,里面图片的名称全部都是01.webp ~ 13.webp,如果放在同一个文件夹里面就会文件名冲突。 因此需要一个方法可以快速将文件重命名,并且全部移入一个总的文件夹里面。 作为程序员,我第一个想到的肯定是使用linux命令,通过写一个脚本就可以很轻松的实现这样的功能:

  • 遍历文件加下面所有文件夹里面的图片文件
  • 生成UUID(时间戳)不允许重复的字符串命名图片
  • 将图片剪切或者拷贝到另外一个文件夹中

脚本具体如下:

代码语言:javascript
复制
#! /bin/bash

mkdir all
#mkdir mp3
#mv ./图集*/* .mp3. /mp3/

oldIFS=$IFS
IFS=$'\n'
for file in `ls ./图集*/*`
do
i=`date +%s%N`;
newFile=`echo ./all/${i}.jpg`;
mv $file $newFile
done
IFS=$oldIFS

windows系统如何执行Linux脚本呢? 可以使用 git bash here,条件就是得先安装git啦

其实也可以使用编写.bat脚本或者编写python脚本来实现同样的功能。但我作为一个后端程序员,最熟悉的还是Linux脚本。

爬虫

该方法主要是通过观察图片网站上获取图片的规律,根据原网站拼接出具体图片的url,然后保存图片文件。 爬虫的方法网上很多,贴一个亲试可用的代码:

代码语言:javascript
复制
<code class="language-python">import asyncio
import re
import aiohttp
import logging
import os

# 定义日志文件
logging.basicConfig(level=logging.INFO,format="%(asctime)s-%(levelname)s:%(message)s")

# 定义初始页的url
INDEX_URL = "http://pic.netbian.com/4kdongman/index_{page}.html"
# 定义详情页的url
DETAIL_URL = "http://pic.netbian.com{id}.html"
# 定义壁纸的初始url
IMG_URL = 'http://pic.netbian.com{img_url}'

# 定义将要爬取的页数
PAGE_NUMBER = 147
# 定义爬取的信号量
CONCURRENCY = 5

# 构造存储壁纸的路径
PATH = "D:\img"
if not os.path.exists(PATH):
    os.mkdir(PATH)

# 初始化信号量
semaphore = asyncio.Semaphore(CONCURRENCY)
session = None

# 此函数的功能是定义一个基本的抓取方法,传入url即可返回网页的源代码
async def scrape_api(url):
    async with semaphore:
        try:
            logging.info('scraping %s',url)
            async with session.get(url) as response:
                return await response.text()
        except aiohttp.ClientError:
            logging.error('error occurred while scraping %s',url,exc_info=True)

# 此函数的功能是构造初始页的url
async def scrape_index(page):
    url = INDEX_URL.format(page=page)
    return await scrape_api(url)

# 此函数的功能是定义详情页的url,并解析详情页,拿到img的url和名字
async def scrape_detail(id):
    url = DETAIL_URL.format(id=id)
    data = await scrape_api(url)
    IMG = re.search('<img src="(.*?)" data-pic',data,re.S).group(1)
    img_url = IMG_URL.format(img_url=IMG)
    name = re.findall('<img.*?title="(.*?)"',data,re.S)[0]
    return await scrape_save_img(img_url,name)

# 此函数的功能是访问图片的链接,并返回二进制数据
async def scrape_save_img(url,name):
    async with semaphore:
        try:
            logging.info('scraping %s',url)
            async with session.get(url) as response:
                img = await response.read()
                return await save_data(img,name)
        except aiohttp.ClientError:
            logging.error('error occurred while scraping %s',url,exc_info=True)

# 此函数的功能是存储图片
async def save_data(img,name):
    with open(f'D:\img\\{name}.jpg',"wb") as f:
        print('正在存储图片')
        f.write(img)
        f.close()
        print('图片存储成功')

# 主函数
async def main():
    global session
    # 初始化session
    session = aiohttp.ClientSession()
    # 定义爬取列表页的所有task
    scrape_index_tasks = [asyncio.ensure_future(scrape_index(page))for page in range(2,PAGE_NUMBER+1)]
    # 调用asyncio.gather方法传入task列表,将结果赋值给result,这个result就是所有task返回结果的列表
    result = await asyncio.gather(*scrape_index_tasks)
    logging.info('result %s',result)

    # 遍历result
    for index_data in result:
        # 判断index_data是否为空,防止出现空白index_data导致程序意外终止
        if not index_data:continue
        ids = re.findall('<li><a href="(.*?).html" target="_blank"><img',index_data,re.S)[1:20]
        # 声明爬取所有详情页task组成的列表
        scrape_index_tasks = [asyncio.ensure_future(scrape_detail(id))for id in ids]
        # 调用asyncio.wait方法调用执行,也可以用gather方法,效果一样,返回结果有差异
        await asyncio.wait(scrape_index_tasks)
    # 关闭session
    await session.close()

# 程序开始运行
if __name__ == '__main__':
    # 调用异步协程
    asyncio.get_event_loop().run_until_complete(main())

该方法获取的图片好像不是4K高清的,只有1K的清晰度

可以使用下面提供的方法,现将图片转4K,然后再无损压缩一下,就可以得到一个质量比较高的图片了。

其他方法获取高清壁纸

资源分享

分享一

分享二

免费图库

360壁纸

必应壁纸

动漫壁纸

搜图神器

搜图神器

图片优化

添加水印、图片压缩等

临时可以使用下面三个网站

改图鸭

改图宝

色彩笔(可以下载app)

图片去水印

非常好用的免费软件下载

代码语言:javascript
复制
aHR0cDovL3Bhbi5xa29uZ3Rhby5jbi8lRTQlQjglQkIlRTclQkQlOTElRTclOUIlOTgvJUU4JUJEJUFGJUU0JUJCJUI2L1BDJUU4JUJEJUFGJUU0JUJCJUI2LyVFNSU5QiVCRSVFNyU4OSU4NyVFNSU4RSVCQiVFNiVCMCVCNCVFNSU4RCVCMC9JbnBhaW50X3Y4LjFfeDY0Nl85Znh3LmNvbS5leGU=

转4K

AI处理变清晰软件下载

代码语言:javascript
复制
aHR0cDovL3Bhbi5xa29uZ3Rhby5jbi8lRTQlQjglQkIlRTclQkQlOTElRTclOUIlOTgvJUU4JUJEJUFGJUU0JUJCJUI2L1BDJUU4JUJEJUFGJUU0JUJCJUI2LyVFNiVBOCVBMSVFNyVCMyU4QSVFNSU5QiVCRSVFNyU4OSU4NyVFNSU4RiU5OCVFNiVCOCU4NSVFNiU5OSVCMC9BSSVFNSU5QiVCRSVFNSU4QyU5NiVFRiVCQyU4OEZ1bGwlRUYlQkMlODkuZXhl

一张很模糊的图片通过该软件处理后,可以变成一张质量很高的图片,真的能看出巨大的区别。 示例 图片处理前:

图片处理并压缩后:

gif截图和处理

gif截图工具

推荐两款巨好用的动图截图工具

GifCam

代码语言:javascript
复制
aHR0cDovL3Bhbi5xa29uZ3Rhby5jbi8lRTQlQjglQkIlRTclQkQlOTElRTclOUIlOTgvJUU4JUJEJUFGJUU0JUJCJUI2L1BDJUU4JUJEJUFGJUU0JUJCJUI2L0dpZkNhbS56aXA=

Gif录屏

代码语言:javascript
复制
aHR0cDovL3Bhbi5xa29uZ3Rhby5jbi8lRTQlQjglQkIlRTclQkQlOTElRTclOUIlOTgvJUU4JUJEJUFGJUU0JUJCJUI2L1BDJUU4JUJEJUFGJUU0JUJCJUI2L0dpZiVFNSVCRCU5NSVFNSVCMSU4Ri5leGU=

这两个功能差不多

Gif处理工具

图贴士

开源个人图库源码

这是一个很常见的图库源码,里面的图片是360壁纸、必应壁纸等开源图片。

预览地址:http://code.qkongtao.cn/wallpaper/

源码地址:https://gitee.com/KT1205529635/wallpaper

效果如下:

base64工具

base64工具

解码上面的下载链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 图片获取
    • 抖音解析图集
      • 图片整理(Linux批量文件处理)
        • 爬虫
          • 其他方法获取高清壁纸
            • 资源分享
            • 免费图库
            • 搜图神器
        • 图片优化
          • 添加水印、图片压缩等
            • 图片去水印
              • 转4K
              • gif截图和处理
                • gif截图工具
                • 开源个人图库源码
                • base64工具
                相关产品与服务
                图片处理
                图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档