ImageResizer - Ошибка преобразования PSD-файла - System.ArgumentException: параметр недействителен - PullRequest
1 голос
/ 20 сентября 2011

У меня есть система, где я загружаю отдельные файлы на веб-сервер.После загрузки я запускаю команду для создания файлов разных размеров.

Загруженные файлы являются PSD и должны быть преобразованы в pngs и jpgs.

Загрузка работает нормально, и я вижу файлв каталоге.Но когда запускается команда «генерировать версии», я получаю эту ошибку

»файл может быть поврежден пустым или может содержать изображение в формате png с одним размером больше 65535"

Это строка

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

Ответы [ 3 ]

2 голосов
/ 18 сентября 2012

При использовании управляемого API с ASP.NET, но , а не HttpModule, вам нужно вызвать

protected void Application_Start()
{
    ImageResizer.Configuration.Config.Current.Plugins.LoadPlugins();
}

в Global.asax.cs вВ дополнение к следующим web.config настройкам

<configSections>
   <section name="resizer" type="ImageResizer.ResizerSection"  requirePermission="false"  />
</configSections>

<resizer>
  <plugins>
    <add name="PsdReader" />
  </plugins>
</resizer>

В противном случае плагины не будут зарегистрированы, если вы не используете Http-модули.

Вы можете проверитьправильная загрузка плагинов путем вызова

ImageResizer.Configuration.Config.Current.GetDiagnosticsPage()

На этой странице также отображаются поддерживаемые типы файлов (.psd, если плагин загружен правильно).

Спасибо Натанаэлю (владельцу ImageResizer) за указание на меняк этому решению.

1 голос
/ 21 сентября 2011

решаемые

Вам необходимо добавить следующее в ваш файл web.config

<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

0 голосов
/ 19 января 2012

На самом деле все, что вам нужно сделать, это добавить <add name="PsdReader" /> в раздел <plugins/>. Другие вещи нужны только для синтаксиса URL, а не для управляемого API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...