parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Небольшой пример...

Sumo 11.08.2004 17:04 / 11.08.2004 17:05

Вырезал кусок своего класса:
# Класс-обвязка для консольного ImageMagick
@CLASS
cImageMagick

@auto[]
## Статический конструктор
  $imPath[]
  $inputImagesDir[]
  $outputImagesDir[]

  $convertScript[${imPath}convert]
  $identifyScript[${imPath}identify]
  $compositeScript[${imPath}composite]

@create[aParams]
## Создает объект
## Путь к скриптам задается от корня сайта
## Путь к картинкам задается от местоположения скриптов или от корня диска
## В качестве параметра передается хэш
## $.imPath - путь к скриптам ImageMagick  
## $.inputDir, $.outputDir - пути к картинкам. Если не задан outputDir, то считаем, что пишем в inputDir
  $imPath[$aParams.imPath]
  $inputImagesDir[$aParams.inputDir]
  ^if(def $aParams.outputDir){
    $outputImagesDir[$aParams.outputDir]
  }{
    $outputImagesDir[$aParams.inputDir]
  }

# Названия скриптов ImageMagick  
  $convertScript[${imPath}convert]
  $identifyScript[${imPath}identify]
  $compositeScript[${imPath}composite]

@getImageInfo[aInputImg][lScript;lRet]
# Возвращает хэш с параметрами картинки
# $.name $.format $.width $.height $.colors $.depth
# $.identify - определен или не определен тип картинки
# Рекомендуется использовать для определения возможности 
# работы с данным типом изображений.
^if(def $aInputImg){
  $lScript[^file::exec[$identifyScript;;-format;%f %m %wx%h %k %q %b;${inputImagesDir}^file:basename[$aInputImg]]]
  ^if($lScript.status > 0){
    $result[$.isIdentify(0)]
  }{
#                               1name   2format 3wid  4heig   5colors 6depth  7size
     $lRet[^lScript.text.match[^(\S+)\s+(\S+)\s+(\d+)x(\d+)\s+(\d+)\s+(\S+)\s+(\S+)]]
     ^if($lRet){
       $result[
         $.isIdentify(1)
         $.name[^file:basename[$lRet.1]]
         $.format[$lRet.2]
         $.width($lRet.3)
         $.height($lRet.4)
         $.colors[$lRet.5]
         $.depth[$lRet.6]
         $.size[$lRet.7]
       ]
     }{
       $result[$.isIdentify(0)]
     }
   }  
}{
  ^throw[im.error;ImageMagick.Identify.Exec;Missing image file name.]    
}
  
@makePreview[aInputImg;aOptions][lScript;lPrefix;lOutputImg]
# Делает превьюшку для картинки
# В качестве параметров принимает имя файла и хеш с параметрами
# $.width, $.height - размер превьюшки [должен быть определен хотябы один параметр]
# $.prefix - префикс для файла с превьюшкой. Если не определен, то используется "pr_"
# Возвращает признак удачности выполнения:
#   ^if(^img.makePreview[test.tif]){сделали}{не сделали}
# Всегда ковертирует картинку в RGB и убирает все embedded profiles. Выходной формат - JPEG.
^if(def $aInputImg){
  ^if(def $aOptions.width || def $aOptions.height){
    ^if(def $aOptions.prefix){$lPrefix[$aOptions.prefix]}{$lPrefix[pr_]}
    $lOutputImg[${lPrefix}^file:justname[$aInputImg].jpg]
    $lScript[^file::exec[$convertScript;;${inputImagesDir}^file:basename[$aInputImg];-resize;${aOptions.width}x${aOptions.height};-colorspace;RGB;+profile;"*";${outputImagesDir}$lOutputImg]]
    ^if($lScript.status > 0){
      ^throw[exec.error;ImageMagick.Convert.Exec;$lScript.stderr]    
    }
  }{
    ^throw[im.error;ImageMagick.Convert;Size not define.]    
   }
}{
  ^throw[im.error;ImageMagick.Convert.Exec;Missing image file name.]    
}