大贤者
精华
|
战斗力 鹅
|
回帖 0
注册时间 2016-6-11
|
本帖最后由 SmterC 于 2021-1-15 11:25 编辑
试了一下,安卓上用的本地漫画软件comic screen支持webp但不支持heic。毕竟webp是谷歌亲儿子吧,大部分安卓应用下webp都没有兼容问题。
喜大普奔,把后缀名从heic改成webp后就能看了,看来是系统已经支持了,只是漫画软件没做适配
不知道有没有支持heic的漫画软件推荐……我这里也提供一下我之前写的一个Python小脚本,用来批量转换漫画到webp格式的,也算是安卓用户暂时的替代方案吧。毕竟是自用的,代码水平臭还请轻拍。
- import subprocess, multiprocessing, time, locale, time, os.path, os, re
- from PIL import Image
- def get_filename(path):
- name = []
- filetypes = ['jpg', 'png', 'JPG', 'PNG', 'jpeg', 'JPEG']
- for root, dirs, files in os.walk(path):
- for file in files:
- if True in [filetype in file for filetype in filetypes]:
- wholePath = os.path.join(root, file)
- name.append(wholePath)
- print('找到%d个可以转换的图片' % len(name))
- return name
- def ruuun(kksk):
- p = subprocess.Popen(kksk)
- p.wait()
- # print(kksk)
- if __name__ == '__main__':
- print(' _ __ __ ___ __ ___ ')
- print(' | | /| / /___ / / / _ \ / |/ /___ _ ___ ___ _ ___ _')
- print(' | |/ |/ // -_)/ _ \ / ___/ / /|_/ // _ `// _ \/ _ `// _ `/')
- print(' |__/|__/ \__//_.__//_/ /_/ /_/ \_,_//_//_/\_, / \_,_/ ')
- print(' /___/ \t ver 2.0')
- path = input('输入想要遍历的文件夹:(默认空)')
- # filetype = input('想要转换的图片格式(png、jpg,默认jpg):')
- loss = input('是否无损压缩?\n\t输入任意值无损\t默认有损:')
- q = input('转换质量(0~100,默认85):')
- pre = input('输入图片类型\n\t漫画为0,照片为1,人像为2,默认为漫画:')
- limit = input('有无希望图片压缩达到的大小限制?以kb为单位:')
- resize = input('图片的尺寸限制?:')
- # wait = input('每4个任务后的等待时间:')
- startFlag = input('开始执行(y/n):')
- if path.strip() == '':
- path = './'
- # if filetype.strip() == '':
- # filetype = 'jpg'
- if q.strip() == '':
- q = '85'
- q = '-q ' + q
- if loss.strip() != '':
- loss = '-lossless'
- q = ''
- # wait = 5
- if pre.strip() == '':
- preset = 'drawing'
- if pre.strip() == '0':
- preset = 'drawing'
- if pre.strip() == '1':
- preset = 'photo'
- if pre.strip() == '2':
- preset = 'picture'
- if limit.strip():
- li = eval(limit) * 1000
- limit = '-size %d -pass 10' % li
- if limit.strip() == '':
- limit = ''
- if resize.strip() == '':
- resize = False
- else:
- resize = True
- # if wait.strip() == '':
- # wait = '4'
- if not startFlag.lower() == 'y':
- print('执行终止')
- exit()
- files = get_filename(path)
- # slc = 0
- pool = multiprocessing.Pool(8)
- for file in files:
- pos = file.rfind("\")
- os.makedirs(os.path.join('./result/', file[:pos]), exist_ok=True)
- resultpath = file.replace(re.findall('\.[a-zA-z]+', file)[-1], '.webp')
- existVerify = os.path.exists('./result/' + resultpath)
- if existVerify:
- zerobitVerif = os.path.getsize('./result/' + resultpath)
- if zerobitVerif != 0:
- continue
- resize_config = ''
- if resize:
- img = Image.open(file)
- img_size = img.size
- if (img_size[0] > 1080 and img_size[1] > 1920) or (img_size[1] > 1080 and img_size[0] > 1920):
- beishu = max(round(img_size[0] / 1080), round(img_size[0] / 1920))
- resize_config = "-resize %s %s" % (img_size[0] / beishu, img_size[1] / beishu)
- kksk = 'cwebp -preset %s %s %s "%s" -m 6 %s -sharp_yuv -metadata all %s -short -af -mt -o "./result/%s"' % (
- preset, loss, q, file, limit, resize_config, resultpath)
- # print(kksk)
- pool.apply_async(func=ruuun, args=(kksk,))
- # slc = slc + 1
- # if slc == 4:
- # time.sleep(int(wait))
- # slc = 0
- pool.close()
- pool.join()
- print('全部完成,一共转换了%d张图片' % len(files))
- exit = input('ds')
复制代码 这段代码本质就是调用环境变量里的cwebp编码器来转换遍历文件到result文件夹,所以需要先从Google开发者官网下载个webptools放环境变量里。
因为之前用Honeyview自带的格式转换转换到webp,发现结果和官方提供的最新编码器还是有点差距的,所以还是建议去下个最新的编码器来压缩比较好。
代码写的烂,所以只能遍历这个py文件同级或以下的目录,建议放到漫画根目录。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|