转换PSD文件时出错.参数无效
本文关键字:参数 无效 出错 PSD 文件 转换 | 更新日期: 2023-09-27 18:09:10
我有一个系统,我上传单个文件到web服务器。上传后触发命令生成不同大小的文件。
上传的文件为PSD格式,需要转换为png和jpg格式。
上传工作正常,我可以看到目录中的文件。但是当"生成版本"命令被触发时,我得到这个错误
"文件可能被损坏为空,或者可能包含单个尺寸大于65535的PNG图像"
generatedFiles.Add(ImageBuilder.Current.Build(file, strDestinationPath, objResizeCommand, false, true));
完整的命令是
public IList<string> GenerateVersions(decimal id, string file, string filename)
{
List<string> generatedFiles = new List<string>();
foreach (var tCmdSets in db.IMG_SETTINGS_CMDSETS.Where("it.SETTINGS_FOLDER_ID = @folderid", new ObjectParameter("folderid", id)))
{
var strDestinationPath = ImageResizer.Util.PathUtils.RemoveExtension(Path.Combine(tmpDefaultFolder, tCmdSets.SETTINGS_CMDSET_DESTINATION, filename));
ResizeSettings objResizeCommand = new ResizeSettings(tCmdSets.SETTINGS_CMDSET_COMMAND);
generatedFiles.Add(ImageBuilder.Current.Build(file, strDestinationPath, objResizeCommand, false, true));
}
return generatedFiles;
}
和变量填充,直到错误:
file "c:''www''upload''masters''Products''upload_test.psd" string
objResizeCommand {?maxwidth=800&maxheight=600&format=jpg} ImageResizer.ResizeSettings
strDestinationPath "c:''www''upload''converted''items''big''upload_test" string
这里是堆栈跟踪
[ArgumentException: Parameter is not valid.]
ImageResizer.ImageBuilder.LoadImage(Object source, ResizeSettings settings) in C:'Users'Administrator'Documents'resizer'Core'ImageBuilder.cs:186
[ImageCorruptedException (0x80004005): File may be corrupted, empty, or may contain a PNG image with a single dimension greater than 65,535 pixels.]
ImageResizer.ImageBuilder.LoadImage(Object source, ResizeSettings settings) in C:'Users'Administrator'Documents'resizer'Core'ImageBuilder.cs:190
ImageResizer.ImageBuilder.Build(Object source, Object dest, ResizeSettings settings, Boolean disposeSource, Boolean addFileExtension) in C:'Users'Administrator'Documents'resizer'Core'ImageBuilder.cs:306
imageController.Classes.ImageHandling.GenerateVersions2(String original) in C:'Users'tha'Documents'Visual Studio 2010'Projects'imageController'imageController'Classes'ImageHandling.cs:26
imageController.Controllers.UploadController.UploadSingleFile(Decimal id, HttpPostedFileBase objFile) in C:'Users'tha'Documents'Visual Studio 2010'Projects'imageController'imageController'Controllers'UploadController.cs:62
lambda_method(Closure , ControllerBase , Object[] ) +261
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8897857
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
在ASP. net中使用托管API时。. NET,但是不是 HttpModule,你需要调用
protected void Application_Start()
{
ImageResizer.Configuration.Config.Current.Plugins.LoadPlugins();
}
Global.asax.cs中的除了下面的web。设置配置
<configSections>
<section name="resizer" type="ImageResizer.ResizerSection" requirePermission="false" />
</configSections>
<resizer>
<plugins>
<add name="PsdReader" />
</plugins>
</resizer>
否则当你不使用Http模块时,插件将不会被注册。
你可以通过调用
来验证插件的正确加载ImageResizer.Configuration.Config.Current.GetDiagnosticsPage()
此页面还显示了支持的文件类型(.psd,如果插件加载正确)。
感谢Nathanael (ImageResizer的所有者)为我指出这个解决方案。
SOLVED
您需要添加以下内容到您的web。配置文件
<configSections>
<section name="resizer" type="ImageResizer.ResizerSection"/>
</configSections>
<resizer>
<sizelimits />
<diskcache enabled="false" />
<remotereader signingKey="ag383ht23sag#laf#lafF#oyfafqewt;2t w eyfwfefwqefqw" allowAllSignedRequests="true" />
<plugins>
<add name="DiskCache" />
<add name="PsdReader" />
<add name="PrettyGifs" />
<add name="Image404" />
<add name="AnimatedGifs" />
<add name="Gradient" />
<add name="SimpleFilters" />
<add name="RemoteReader" />
<add name="AdvancedFilters" />
<add name="CloudFront" />
<add name="SeamCarving" />
<add name="FolderResizeSyntax" />
<add name="ImageHandlerSyntax" />
<add name="MyCode.MyPlugins.SamplePlugin" />
<add name="WhitespaceTrimmer" />
</plugins>
</resizer>
<httpModules>
<add name="ImageResizingModule" type="ImageResizer.InterceptModule"/>
</httpModules>
<modules runAllManagedModulesForAllRequests="true">
<add name="ImageResizingModule" type="ImageResizer.InterceptModule"/>
</modules>
' T
实际上,您所需要做的就是将<add name="PsdReader" />
添加到<plugins/>
部分。其他的东西只需要URL语法,不需要托管API。