p图片windows系统如何执行Linux批量文件处理图片采集的折腾经历
背景
由于很久之前的某一次在抖音上刷到了一个很赞的,分享海贼王壁纸的up主,后面他也经常更新高质量海贼王壁纸的图集,我觉得很赞,因此想自己全部下载保存下来,所以有了这次图片采集的折腾经历。过程大概就是先从某个渠道采集抖音该UP主的图片资源,然后使用shell脚本处理这些图片的名称和快速导入某个文件夹,最后挑选不好的图片删掉。
后来又想到自己搞一个个人的专属图库p图片,就想到使用python爬虫爬取线上壁纸图片,由于技术问题,爬取的这些图片并不是4K图片,因此又折腾图片AI优化转4K,但转出来的图片有些大p图片,最后就进行尽量的无损压缩,最终得到的图片大小竟然和1K的图片大小差不太多,但图片已经是4K,画质也高了不少。因此想把这个折腾的过程记录一下!
图片获取抖音解析图集
抖音采集使用的抖音采集工具。
下载地址:
aHR0cDovL3Bhbi5xa29uZ3Rhby5jbi8lRTQlQjglQkIlRTclQkQlOTElRTclOUIlOTgvJUU4JUJEJUFGJUU0JUJCJUI2L1BDJUU4JUJEJUFGJUU0JUJCJUI2LyVFNiU4QSU5NiVFOSU5RiVCMyVFOSU4NyU4NyVFOSU5QiU4NiVFNSVCNyVBNSVFNSU4NSVCNy43eg==
这个工具使用很简单,应该稍微看一下就能上手使用了,可以采集某个视频作者的全部作品,包括图集,具体就不多介绍。
另外如果想去水印解析单个作品,则可以使用下面的工具:
工具一
工具二
抖音采集后的目录大概是这样子
每个图集作品的结构如下
图片整理(Linux批量文件处理)
这样就会有一个问题,好几十个图集文件夹,里面图片的名称全部都是01.webp ~ 13.webp,如果放在同一个文件夹里面就会文件名冲突。
因此需要一个方法可以快速将文件重命名,并且全部移入一个总的文件夹里面。
作为程序员,我第一个想到的肯定是使用linux命令,通过写一个脚本就可以很轻松的实现这样的功能:
脚本具体如下:
#! /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,然后保存图片文件。
爬虫的方法网上很多,贴一个亲试可用的代码:
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('
该方法获取的图片好像不是4K高清的,只有1K的清晰度
可以使用下面提供的方法,现将图片转4K,然后再无损压缩一下,就可以得到一个质量比较高的图片了。
转载原创文章请注明,转载自设计培训_平面设计_品牌设计_美工学习_视觉设计_小白UI设计师,原文地址:https://www.zfbbb.com/?id=9644