「Python」PNG OR JPG Convert to WebP

PNG/JPG Convert to Webp(Python)

前言

关于webp 的优势以及原理性的东西,之前看过腾讯的一篇文章.WebP原理和Android支持现状介绍

webp 图片格式兼容到Android4.0,之前转换webp的时候都是通过在线转换器,不过效率是在是太慢了,单张还好,批量转换就很痛苦了,故本人写了一个python 脚本来实现自动化批量将png 或者 jpg 转换为webp

环境搭建
  • webp环境

    Mac 可以使用homebrew来安装实用程序。

      brew install webp
    

    安装实用程序完成后,就可以使用 cwebp命令 将 JPEG 或 PNG 图像转换成 webp 格式, 也可以通过dwebp 命令将 webp 图像转换回 PNG、PAM、PPM 或 PGM 图像。

    示例

      cwebp [options] -q quality input.jpg -o output.webp  
    

    质量选项应该是 0 (差)到 100 (很好)之间的数字,典型的质量值大约是 80,也可以多尝试几个数值。本人一般转图片时质量用的是80

      dwebp input_file.webp [options] [-o output_file]
    
  • python 环境

    python现在已经很火了,网上关于python的环境搭建也有很多,Google下下了,如果想学习python的话,推荐廖雪峰老师的教程,还是比较容易懂的。廖雪峰老师Python

需求分析

了解了上面的cwebp命令,下面就用python对cwebp 进行一个简单的封装就好了。首先我希望quality是可配置的;另外我还希望有一个默认大小的配置,比如改文件夹下低于20kb的我希望用原图,不将其转换为webp 下面直接贴代码。大思路是这样:首先去检查参数,文件夹路径等,默认输出到原文件夹_webp下面,转换完以后统一copy并删除原文件

# encoding=utf-8

#  -s 最小要压缩图片大小 (kb)
#  -i 要压缩的图片文件夹目录
#  -q 压缩图片质量  默认80

import commands
import os
import sys
import getopt
import shutil

input_file = "" 
quality = "80"

outputPath = input_file + "_webp"

compressSize = ""


def handle_sys_arguments():
    opts, args = getopt.getopt(sys.argv[1:], "hi:o:q:s:")
    global quality
    global output_file
    global compressSize
    global input_file

    for op, value in opts:
        # print("op:" + op + "__" + value)
        if op == "-i":
            input_file = value
        elif op == "-o":
            output_file = value
        elif op == "-h":
            print(" -s 最小要压缩图片大小 (kb)\n -i 要压缩的图片文件夹目录\n -q 压缩图片质量  默认80")
            exit()
        elif op == "-q":
            quality = value
        elif op == "-s":
            compressSize = value


def path_file(path):
    for i in os.listdir(path):
        print(i)
        new_path = os.path.join(path, i)
        if os.path.isfile(new_path):
            transform(new_path)
        else:
            path_file(new_path)


def transform(f):
    split_name = os.path.splitext(f)
    filePath = f

    print(split_name[0])

    if split_name[1] == ".webp" or (split_name[1] != ".jpg" and split_name[1] != ".png"):
        return

    if compressSize.strip() != "" and os.path.getsize(filePath) / 1024.0 > int(compressSize):
        command = "cwebp -q " + quality + " " + filePath + " -o " + \
                  split_name[0] + ".webp"
        commands.getstatusoutput(command)
        print("执行了:" + command)
    elif compressSize.strip() == "":
        command = "cwebp -q " + quality + " " + filePath + " -o " + \
                  split_name[0] + ".webp"
        commands.getstatusoutput(command)
        print("执行了:" + command)
    else:
        print("不压缩")


def check_args():
    if input_file.strip() == "":
        print("请输入要转换的文件夹路径")
        exit()


def copy_webp_files(sourceDir, targetDir):
    if not os.path.exists(targetDir):
        os.makedirs(targetDir)

    print sourceDir
    print(targetDir)

    for file in os.listdir(sourceDir):

        new_source_path = os.path.join(sourceDir, file)
        new_target_path = os.path.join(targetDir, file)

        # print("copyWebpFiles" + new_source_path)
        # print("copyWebpFiles_target" + new_target_path)

        if os.path.isdir(new_source_path):

            copy_webp_files(new_source_path, new_target_path)

        else:
            splite_name = os.path.splitext(file)
            print("copyWebpFiles_split" + splite_name[1])

            if splite_name[1] != ".webp":  # 只复制webp文件
                continue

            shutil.copy(new_source_path, new_target_path)
            os.remove(new_source_path)


if __name__ == '__main__':
    handle_sys_arguments()
    check_args()
    path_file(input_file)
    copy_webp_files(input_file, outputPath)
示例

我在桌面建立一个文件夹,里面放了一些需要抓换的图片,需要将这些图片全部转换为webp,输入命令

python /Users/work/Desktop/webp_converter.py  -i /Users/work/Desktop/img

Webp

WebP-Converter

转载于:https://my.oschina.net/caipeng/blog/1790835

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Python中将WEBP图像转换为JPG格式,您可以使用Pillow库。 首先,您需要确保已安装Pillow库。如果您尚未安装,可以使用以下命令安装它: ``` pip install Pillow ``` 然后,您可以使用以下代码将WEBP图像转换为JPG格式: ```python from PIL import Image # 打开webp图像 with Image.open('image.webp') as im: # 保存为JPG格式 im.convert('RGB').save('image.jpg') ``` 在上面的代码中,我们首先使用`Image.open()`方法打开WEBP图像,并使用`im.convert('RGB')`将其转换为RGB模式。最后,我们使用`im.save()`方法将图像保存为JPG格式。 ### 回答2: 要使用PythonWEBP转换为JPG,可以使用Pillow库。Pillow是一个Python图像处理库,可以进行图像格式转换和编辑。 首先,确保已经安装了Pillow库。可以使用以下命令进行安装: ``` pip install pillow ``` 安装完成后,可以使用以下代码将WEBP转换为JPG: ```python from PIL import Image # 打开WEBP图像 webp_image = Image.open('input.webp') # 将图像转换为RGB格式 rgb_image = webp_image.convert('RGB') # 保存图像为JPG rgb_image.save('output.jpg', 'JPEG') ``` 以上代码首先使用`open()`函数打开WEBP图像,并将其赋值给变量`webp_image`。接着,使用`convert()`函数将图像转换为RGB格式,并将转换后的图像赋值给变量`rgb_image`。最后,使用`save()`函数将RGB图像保存为JPG格式,输出文件名为`output.jpg`。 请注意,上述代码中`input.webp`和`output.jpg`分别是输入和输出的文件路径和名称,需要根据实际情况进行更改。 通过以上代码,您可以使用PythonWEBP图像转换为JPG格式。 ### 回答3: 要使用PythonWEBP文件转换为JPG文件,可以使用Pillow库来实现。Pillow是一个强大的图像处理库,可以在Python中对图像进行各种操作。 首先,确保已经安装了Pillow库。可以使用以下命令来安装: ``` pip install pillow ``` 然后,在Python中导入Pillow库: ```python from PIL import Image ``` 接下来,使用`Image.open()`函数打开WEBP文件,然后使用`convert()`方法将其转换为JPG格式,最后使用`save()`方法保存为新的JPG文件: ```python webp_image = Image.open('input.webp') webp_image.convert('RGB').save('output.jpg', 'JPEG') ``` 上述代码中,`input.webp`是要转换的WEBP文件名,`output.jpg`是转换后的JPG文件名。`convert('RGB')`将图像的色彩模式转换为RGB,因为JPG不支持透明通道。 最后,执行该Python脚本,就可以将WEBP文件转换为JPG文件了。 需要注意的是,Pillow库还支持更多的图像处理操作,例如调整大小、裁剪、旋转等。可以根据具体需求在转换之前或之后添加相应的代码来实现更多功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值