python读取oss的psd并上传jpg

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: python读取oss的psd并上传jpg

死亡,就像是水消失在水中。——博尔赫斯《另一次死亡》

上次说过了psd-tools可以对psd进行处理

今天写一个完整的,oss代码在这:

https://VampireAchao.gitee.io/2022/04/26/python对接oss上传和下载/

# coding=utf-8
import warnings
from io import BytesIO
from psd_tools.constants import Resource
warnings.filterwarnings("ignore", category=Warning)
# 读取psd以及图层信息
def read_psd_info(psd, hidden_layer_ids):
    layers = list(map(lambda layer: __convert_layer_info(layer, hidden_layer_ids), psd))
    resolution_info = psd.image_resources.get_data(Resource.RESOLUTION_INFO)
    return {
        "horizontal": resolution_info.horizontal,
        "horizontal_unit": resolution_info.horizontal_unit,
        "vertical": resolution_info.vertical,
        "vertical_unit": resolution_info.vertical_unit,
        "height": psd.height,
        "height_unit": resolution_info.height_unit,
        "width": psd.width,
        "width_unit": resolution_info.width_unit,
        "layers": layers
    }
# 读取图层子节点,如果有子节点,则递归读取
def __convert_layer_info(layer, hidden_layer_ids):
    visible = layer.is_visible()
    if layer.layer_id in hidden_layer_ids:
        visible = False
    layer_info = {
        "id": layer.layer_id,
        "type": layer.kind,
        "name": layer.name,
        "visible": visible,
        "children": None,
        "box": layer.bbox
    }
    if layer.kind == "group":
        layer_info["children"] = list(map(lambda child: __convert_layer_info(child, hidden_layer_ids), layer))
    return layer_info
# 导出Jpeg图片
def export_jpg_file(psd, hidden_layer_ids):
    warnings.filterwarnings("ignore", category=Warning)
    psd_compose = psd.composite(layer_filter=lambda layer: layer.layer_id not in hidden_layer_ids)
    if psd_compose is None:
        return psd_compose
    img_bytes = BytesIO()
    psd_compose.convert("RGB").save(img_bytes, "JPEG")
    return img_bytes.getvalue()


然后是主启动类:

# coding=utf-8
import argparse
import json
from io import BytesIO
from psd_tools import PSDImage
import oss
import psd
def main():
    parser = argparse.ArgumentParser(description="PSD Tools")
    parser.add_argument("--option", help="What you want to do, with commas split if more!", required=True)
    parser.add_argument("--source", help="Source file path,local or internet", required=True)
    parser.add_argument("--target", help="Target file path, local or internet", required=False)
    parser.add_argument("--hidden_layer_ids", help="Hidden layer ids, with commas split if more!", required=False)
    args = parser.parse_args()
    options = args.option.split(",")
    hidden_layer_ids = list(
        map(lambda layer_id: int(layer_id), args.hidden_layer_ids.split(","))) if args.hidden_layer_ids else []
    oss_file = oss.download_file_bytes(args.source)
    oss_file_bytes = BytesIO(oss_file.read())
    psd_image = PSDImage.open(oss_file_bytes)
    psd_info = None
    if "info" in options:
        psd_info = psd.read_psd_info(psd_image, hidden_layer_ids)
        psd_info["sourceFileSize"] = oss_file.content_length
    if "export" in options:
        psd_image = psd.export_jpg_file(psd_image, hidden_layer_ids)
        oss.upload_file(psd_image, args.target)
    print(json.dumps(psd_info))
if __name__ == '__main__':
    main()

运行一下:

# 导出图层并获取psd信息
# --source=oss上的原文件名
# --target=oss需要上传的文件名
# --option=info,export 操作,逗号隔开
# --hidden_layer_ids 隐藏的图层,逗号隔开
python D:/file/projects/python/simple-psd-tools/main.py --source=test/001.psd --target=test/2022-04-25/001.jpeg --option=info,export --hidden_layer_ids=
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
打赏
0
0
0
0
29
分享
相关文章
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1491 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
对象存储OSS-Python设置代理访问请求
通过 Python SDK 配置 nginx 代理地址请求阿里云 OSS 存储桶服务。示例代码展示了如何使用 RAM 账号进行身份验证,并通过代理下载指定对象到本地文件。
116 15
Ceph Reef(18.2.X)之python操作对象存储网关
这篇文章介绍了如何在Ceph Reef(18.2.X)环境中使用Python操作对象存储网关(rgw),包括环境搭建、账号创建、使用s3cmd工具以及编写和测试Python代码。
71 3
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
【python工具】WebP格式转成JPG、PNG和JPEG
平时在网上搜索图片,另存为时常常遇到 WebP 格式,而非常见的 JPG、PNG、JPEG 格式,所以以此文记录一下WebP的读取和转换方法,希望对大家有所帮助!🥸
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
250 9
Python实现avif图片转jpg格式并识别图片中的文字
在做数据分析的时候有些数据是从图片上去获取的,这就需要去识别图片上的文字。Python有很多库可以很方便的实现OCR识别图片中的文字。这里介绍用EasyOCR库进行图片文字识别。easyocr是一个比较流行的库,支持超过80种语言,识别率高,速度也比较快。
156 2
Python中使用阿里云OSS存储实现文件上传和下载功能
Python中使用阿里云OSS存储实现文件上传和下载功能
2011 2
使用Python脚本重命名OSS目录
因为OSS中本质上没有"目录"这一概念,所有对象(Object)都是以键(Key)的形式存储的,目录结构是通过对象键的前缀和分隔符来模拟的。因此,批量重命名目录实际上是批量更改一组对象的键的前缀。具体来说,需要列举特定目录下所有对象以获取它们的键,然后为每个对象生成新的键,这通常包括替换或添加前缀。接下来,通过复制操作将每个对象移到新的键位置,实质上为它们创建了新的键对应的对象。一旦确认所有对象都成功复制,就进行批量删除,移除那些与原始键相对应的对象。本文提供了一个Python脚本用于实现重命名OSS目录。
使用Python脚本快速批量删除OSS Bucket
要用Python删除OSS Bucket,似乎直接调用delete_bucket()方法就可以了。然而,在实际删除时,常常会遇到各种报错。这是因为OSS为了防止误操作,要求在删除Bucket之前必须清空其中的所有数据,包括对象(Objects)、多版本对象(Multi-version Objects)、碎片(Parts)、LiveChannels。针对需要快速批量删除OSS Bucket的场景,本文提供了一个Python脚本,用于先批量清除Bucket中的上述资源,然后再删除Bucket。
377 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等