VB 通过COM接口解析PSD文件

最近有PS测评的需求,故而想到了解析psd文件,目的就是为了获取文档信息和图层信息;获取PS的图像信息有很多方式,有过程性的,比如监听PS的各种操作事件;有结果性的,比如本文写的解析PSD文件。

0.添加Photoshop 引用

在解决方案邮件点击添加>>引用,如下图:
在这里插入图片描述
在引用管理器中,点击COM,找到Adobe Photoshop XXX ,勾上,点击确定。
在这里插入图片描述

1.在vb文件添加导入Photoshop

在这里插入图片描述

2.解析psd

话不多说,直接上代码:


Imports Photoshop
Imports System.IO

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim filePath As String = "D:\PhotoshopCS6操作题1\1\PS1.psd"
        parsePsd(filePath)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Console.WriteLine("ssss")
        Dim filePath As String = "D:\PhotoshopCS6操作题1\1\PS1.psd"
        parsePsd(filePath)
    End Sub

    Private Sub parsePsd(filePath As String)
        Dim fileInfo As New FileInfo(filePath)
        Dim fileSizeInBytes As Long = fileInfo.Length
        Dim fileSizeInMB As Double = fileSizeInBytes / (1024 * 1024)

        If fileSizeInMB > 5 Then
            Console.WriteLine("文档大小[{0}MB]超过5MB", fileSizeInMB)
        Else
            Console.WriteLine("文档大小[{0}MB]符合要求", fileSizeInMB, fileSizeInBytes)
        End If
        ' 创建Photoshop应用程序对象
        Dim app As New Photoshop.Application()

        ' 打开PSD文件
        Dim doc As Photoshop.Document = app.Open(filePath)
        Try
            Console.WriteLine("名称: " & doc.Name)
            Console.WriteLine("文档尺寸宽: " & doc.Width)
            Console.WriteLine("文档尺寸高: " & doc.Height)
            Console.WriteLine("颜色模式: " & doc.Mode.ToString)

            ' 获取图像分辨率
            Dim resolution As Double = doc.Resolution
            Console.WriteLine("图像分辨率:{0} dpi", resolution)
            ' 将宽度和高度转换为像素
            Dim widthInPixels As Integer = CInt((doc.Width * resolution) / 2.54)
            Dim heightInPixels As Integer = CInt((doc.Height * resolution) / 2.54)
            Console.WriteLine("图像宽度:{0} 像素", widthInPixels)
            Console.WriteLine("图像高度:{0} 像素", heightInPixels)

            ' 遍历图层
            For Each layer As Object In doc.Layers
                Console.WriteLine("0图层名称: " & layer.Name)
                Console.WriteLine("0图层LayerType: " & layer.Kind.ToString)
                Console.WriteLine("0图层Opacity: " & layer.Opacity)
                Console.WriteLine("0图层IsBackgroundLayer: " & layer.IsBackgroundLayer)
                If layer.Kind = PsLayerKind.psTextLayer Then
                    Console.WriteLine("0图层文字内容: " & layer.TextItem.Contents)
                    Console.WriteLine("0图层文字字体size: " & layer.TextItem.Size)
                    Console.WriteLine("0图层文字字体: " & layer.TextItem.Font)
                    ' 获取文字颜色
                    Dim textColor As SolidColor = layer.TextItem.Color

                    ' 获取颜色的分量值
                    Dim red As Integer = textColor.RGB.Red
                    Dim green As Integer = textColor.RGB.Green
                    Dim blue As Integer = textColor.RGB.Blue
                    Console.WriteLine("HexValue: " & textColor.RGB.HexValue)
                    Console.WriteLine("文字颜色:R={0}, G={1}, B={2}", red, green, blue)
                End If
                If layer.IsBackgroundLayer = True Then
                    Console.WriteLine("背景:PixelsLocked={0}, IsBackgroundLayer={1}, Visible={2}", layer.PixelsLocked, layer.IsBackgroundLayer, layer.Visible)
                    ' 检查图层是否有蒙版
                    'If layer.HasLayerMask Then
                    ' 获取蒙版
                    'Dim layerMask As Object = layer.LayerMask
                    'Console.WriteLine("layerMask:" & layerMask.ToString)
                    'End If
                End If
            Next

            Console.WriteLine("========================================")

            For Each layer As ArtLayer In doc.ArtLayers
                Console.WriteLine("图层名称: " & layer.Name)
                Console.WriteLine("图层LayerType: " & layer.Kind.ToString)
                Console.WriteLine("图层Opacity: " & layer.Opacity)
                Console.WriteLine("图层IsBackgroundLayer: " & layer.IsBackgroundLayer)

                If layer.Kind = PsLayerKind.psTextLayer Then


                    Console.WriteLine("图层文字内容: " & layer.TextItem.Contents)
                    Console.WriteLine("图层文字字体: " & layer.TextItem.Font)
                    Console.WriteLine("图层文字字体size: " & layer.TextItem.Size)

                    ' 获取文字颜色
                    Dim textColor As SolidColor = layer.TextItem.Color

                    ' 获取颜色的分量值
                    Dim red As Integer = textColor.RGB.Red
                    Dim green As Integer = textColor.RGB.Green
                    Dim blue As Integer = textColor.RGB.Blue
                    Console.WriteLine("HexValue: " & textColor.RGB.HexValue)
                    Console.WriteLine("文字颜色:R={0}, G={1}, B={2}", red, green, blue)

                    Console.WriteLine("图层文字BlendMode: " & layer.BlendMode.ToString)

                    Console.WriteLine("变形: {0}" & layer.TextItem.WarpBend)
                    Console.WriteLine("变形弯曲方向: {0}" & layer.TextItem.WarpDirection.ToString)
                    'psNoWarp = 1
                    'psArc = 2
                    'psArcLower = 3
                    'psArcUpper = 4
                    'psArch = 5
                    'psBulge = 6
                    'psShellLower = 7
                    'psShellUpper = 8
                    'psFlag = 9
                    'psWave = 10
                    'psFish = 11
                    'psRise = 12
                    'psFishEye = 13
                    'psInflate = 14
                    'psSqueeze = 15
                    'psTwist = 16
                    Console.WriteLine("变形样式: {0}" & layer.TextItem.WarpStyle.ToString)
                    '抗锯齿效果: 
                    'psNoAntialias = 1 无
                    'psSharp = 2 锐化
                    'psCrisp = 3 清晰
                    'psStrong = 4 浑厚
                    'psSmooth = 5 平滑
                    Console.WriteLine("文本的抗锯齿方法:" & layer.TextItem.AntiAliasMethod.ToString)


                End If
                Console.WriteLine("BlendMode:" & layer.BlendMode.ToString)

                If layer.IsBackgroundLayer = True Then
                    Console.WriteLine("背景:PixelsLocked={0}, IsBackgroundLayer={1}, Visible={2}", layer.PositionLocked, layer.IsBackgroundLayer, layer.Visible)

                End If
                    Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
            Next

            For Each channel As Channel In doc.Channels
                Console.WriteLine(" channel.Name=" & channel.Name)
                Console.WriteLine(" channel.Kind=" & channel.Kind.ToString)
            Next
            For Each historyState As HistoryState In doc.HistoryStates
                Console.WriteLine(" historyState.Name=" & historyState.Name)
                Console.WriteLine(" historyState.Snapshot=" & historyState.Snapshot)
            Next

            ' 获取背景图层
            Dim backgroundLayer As ArtLayer = doc.BackgroundLayer

          
        Catch ex As Exception
            Console.WriteLine("发生异常: " & ex.Message)
        End Try
        ' 关闭文档
        doc.Close()
        ' 退出Photoshop应用程序
        app.Quit()
    End Sub

End Class

3.解析结果

此方法可以解析到文档基本信息,文档的宽高、颜色模式、分辨率等,图层的基本信息,文字图层信息,文字变化等,图层混合选项及滤镜信息暂时没获取到。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/516945.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Apache Doris】周FAQ集锦:第 2 期

【Apache Doris】周FAQ集锦:第 2 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

ChatGPT 4.0报错 :“Hmm…something seems to have gone wrong.”

ChatGPT报错,GPT-3.5模型正常,GPT-4.0报错:“Hmm…something seems to have gone wrong.” 说明:嗯…好像出了什么问题。 原因: 部分用户在使用GPT-3.5模型时提问正常,GPT-4.0模型提问时,出现这…

如何使用 ChatGPT

原文:How To Use Chatgpt 译者:飞龙 协议:CC BY-NC-SA 4.0 总体介绍 在人工智能和在线创业不断扩张的世界中,ChatGPT 的出现为寻求利用 AI 推动在线成功的个人和企业开辟了令人兴奋的新途径。本书《如何使用 ChatGPT:…

prompt 工程案例

目录 prompt 工程是什么? 案例 vllm 推理加速框架 prompt 工程是什么? prompt:提示词,也就是我们使用网页版输入给大模型的内容就叫 prompt,那什么是 prompt 工程呢? 简单理解其实就是利用编写的 prom…

数据仓库面试总结

文章目录 1.什么是数据仓库?2.ETL是什么?3.数据仓库和数据库的区别(OLTP和OLAP的区别)4.数据仓库和数据集市的区别5.维度分析5.1 什么是维度?5.2什么是指标? 6.什么是数仓建模?7.事实表7.维度表…

基于springboot实现社区医院信息平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现社区医院信息平台系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了社区医院信息平台的开发全过程。通过分析社区医院信息平台管理的不足,创建了一个计算机管理社区医院信…

gpt国内怎么用?最新版本来了

claude 3 opus面世后,这几天已经有许多应用,而其精确以及从不偷懒(截止到2024年3月11日还没有偷懒)的个性,也使得我们可以用它来首次完成各种需要多轮对话的尝试。 今天我们想要进行的一项尝试就是—— 如何从一个不知…

《搜广推算法指南》(2024版) 重磅发布!

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 结合…

CSS层叠样式表学习(字体属性)

(大家好,今天我们将继续来学习CSS字体属性的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 三、CSS字体属性 CSS Fonts(字体)属性用于定义字体系列、大小,粗细,和文字样式(如斜…

Linux云计算之网络基础8——IPV6和常用网络服务

目录 一、IPV6基础 IPV6详解 IPv6数据报的基本首部 IPv6数据报的扩展首部 IPv6地址的表示方法 IPv6地址分类 网际控制报文协议ICMPv6 二、cisco基于IPV6的配置 cisco基于IPV6的配置步骤 模拟配置 三、HTML基础介绍 文档的结构 动手操作一下 四、常用网络服务介绍…

【Canvas技法】图解绘制圆弧的重要函数 arc(x,y,r,startAngle,endAngle,clockWise)

【一图释疑】 【绘制上图用代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>Html5/Canvas中绘制圆弧的重要函数 arc(x,y,r,startA…

[C#]OpenCvSharp实现直方图均衡化全局直方图局部直方图自适应直方图

【什么是直方图均衡化】 直方图均衡化是一种简单而有效的图像处理技术&#xff0c;它旨在改善图像的视觉效果&#xff0c;使图像变得更加清晰和对比度更高。其核心原理是将原始图像的灰度直方图从可能较为集中的某个灰度区间转变为在全部灰度范围内的均匀分布。通过这种方法&a…

【opencv】教程代码 —video(2) optical_flow (稀疏光流、稠密光流)

1. optical_flow.cpp 稀疏光流 #include <iostream> // 引入输入输出流库 #include <opencv2/core.hpp> // 引入OpenCV的核心功能模块 #include <opencv2/highgui.hpp> // 引入OpenCV的高级GUI模块&#xff0c;提供显示图像的功能 #include <opencv2/imgp…

VSCode SSH 连接 Could not establish connection to “XXX“: spawn UNKNOWN.

1. 确认问题&#xff1a; 拉取vscode终端&#xff1a;快捷键 ctrl(数字1旁边那个) 输入&#xff1a;ssh -V 2. 解决方法 2.1 找到本地SSH 位置 默认本地路径&#xff1a; C:\Windows\System32\OpenSSH 2.2 找到要修改的位置 进入 ssh 插件的设置&#xff08;可以通过在插…

基于springboot实现社区医院信息平台系统项目【项目源码+论文说明】

基于springboot实现社区医院信息平台系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了社区医院信息平台的开发全过程。通过分析社区医院信息平台管理的不足&#xff0c;创建了一个计算机管理社区医院信…

实现 select 中嵌套 tree 外加搜索

实现 select 中嵌套 tree 外加搜索 参考地址实现地址 代码 <el-form-item label"考核人员" prop"userIdArr" v-if"title 发起考核"><el-popover v-model"popoverVisible" placement"bottom" trigger"cli…

MySQL-单行函数:数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、MySQL信息函数、其他函数、单行函数练习

1.数值函数 1.1 基本的操作 SELECT ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32), FLOOR(-43.23),MOD(12,5),12 MOD 5,12 % 5 FROM DUAL;1.2 取随机数 SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1) FROM DUAL;1.3 四…

见证历史:Quantinuum与微软取得突破性进展,开启了可靠量子计算的新时代!

Quantinuum与微软的合作取得了重大突破&#xff0c;将可靠量子计算带入了新的时代。他们结合了Quantinuum的System Model H2量子计算机和微软创新的量子比特虚拟化系统&#xff0c;在逻辑量子比特领域取得了800倍于物理电路错误率的突破。这一创新不仅影响深远&#xff0c;加速…

Spring Boot 整合 RabbitMQ 实现延迟消息

关于 RabbitMQ 消息队列&#xff08;Message Queuing&#xff0c;简写为 MQ&#xff09;最初是为了解决金融行业的特定业务需求而产生的。慢慢的&#xff0c;MQ 被应用到了更多的领域&#xff0c;然而商业 MQ 高昂的价格让很多初创公司望而却步&#xff0c;于是 AMQP&#xff0…

点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…