c语言编程笔录

首页 >   > 笔记大全

笔记大全

图片拖不进PS如何办

更新时间:2024-01-01

问题描述

有时候我们在工作中需要将图片拖进PS,但是偶尔会遇到拖不进去的情况,这时候我们应该怎么办呢?

问题分析

造成无法拖入图片的原因可能有很多,下面分别列出几种情况并提供相应的解决方法:

情况一

Photoshop没有打开,需要先打开Photoshop才能拖入图片。以下是用JavaScript代码打开Photoshop的方法:

let app = new ActiveXObject("Photoshop.Application"); //打开Photoshop
app.Visible = true; //让Photoshop可见

情况二

图片格式不被Photoshop支持,这种情况下需要将图片转换为Photoshop支持的格式,比如JPEG、PNG等。以下是用Python代码将一张BMP格式的图片转换为JPEG格式:

from PIL import Image

im = Image.open("example.bmp") #打开一张BMP格式的图片
im.save("example.jpg") #将图片保存为JPEG格式

情况三

Photoshop没有开启允许拖入图片的选项,这个选项名为“允许拖入”,以下是在菜单栏中找到这个选项并开启它的方法:

// 打开Photoshop并等待3秒,以确保Photoshop已经完全开启
var app = WScript.CreateObject("Photoshop.Application")
WScript.Sleep(3000)

// 打开菜单栏中的“文件”选项
app.DoAction(app.CharIDToTypeID("Opn "), undefined, undefined)

// 等待1秒,以确保菜单栏完全打开
WScript.Sleep(1000)

// 打开“首选项”菜单
app.DoAction(app.CharIDToTypeID('Prfr'), undefined, undefined)

// 等待1秒,以确保菜单栏打开
WScript.Sleep(1000)

// 打开“文件浏览器”选项卡
var desc = new ActionDescriptor()
desc.putEnumerated(app.CharIDToTypeID('FlBw'), app.CharIDToTypeID('FlBw'), app.CharIDToTypeID('GenB'))

var ref = new ActionReference()
ref.putProperty(app.CharIDToTypeID('Prpr'), app.CharIDToTypeID('TabP'))
ref.putEnumerated(app.CharIDToTypeID('FlBw'), app.CharIDToTypeID('FlBw'), app.CharIDToTypeID('GenB'))
desc.putReference(app.CharIDToTypeID('null'), ref)

app.executeAction(app.CharIDToTypeID('slct'), desc, DialogModes.NO)

// 等待1秒,以确保选项卡完全打开
WScript.Sleep(1000)

// 开启“允许拖拽”选项并保存
var desc = new ActionDescriptor()
var ref = new ActionReference()
ref.putEnumerated(app.CharIDToTypeID('Prpr'), app.CharIDToTypeID('FtOn'), app.CharIDToTypeID('View'))
desc.putReference(app.CharIDToTypeID('null'), ref)

var desc2 = new ActionDescriptor()
desc2.putBoolean(app.CharIDToTypeID('FtOn'), true)
desc.putObject(app.CharIDToTypeID('T   '), app.CharIDToTypeID('Vw  '), desc2)

app.executeAction(app.CharIDToTypeID('setd'), desc, DialogModes.NO)

// 等待1秒并关闭Photoshop
WScript.Sleep(1000)
app.Quit()

情况四

计算机可能存在某些权限问题,例如没有足够的权限读取文件,或是拖入的图片所在的文件夹无权访问等。这种情况下需要检查计算机的权限设置并重新设置它们。以下是用C#代码检查文件夹权限和重新设置文件夹权限的方法:

//检查文件夹权限
var path = @"C:\ExampleFolder";
var acl = Directory.GetAccessControl(path);
var rules = acl.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));

foreach (FileSystemAccessRule rule in rules)
{
    Console.WriteLine("User: {0}", rule.IdentityReference);
    Console.WriteLine("Type: {0}", rule.AccessControlType);
    Console.WriteLine("Rights: {0}", rule.FileSystemRights);
    Console.WriteLine();
}

//重新设置文件夹权限
var path = @"C:\ExampleFolder";
var user = Environment.UserDomainName + "\\" + Environment.UserName;
var dir = new DirectoryInfo(path);
var security = dir.GetAccessControl();

security.AddAccessRule(new FileSystemAccessRule(user, FileSystemRights.Modify, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));

dir.SetAccessControl(security);