Beispiel #1
0
 /**
  * Обработка файла.
  */
 public static function transform(FileNode $node)
 {
     if (0 !== strpos($node->filetype, 'image/')) {
         return;
     }
     $result = array();
     // Относительный путь к исходному файлу
     $source = $node->getRealURL();
     // Путь к файловому хранилищу, используется только чтобы
     // из полного пути сделать относительный после трансформации.
     $storage = Context::last()->config->getPath('modules/files/storage', 'files');
     // Файлы без расширений не обрабатываем, чтобы не нагенерировать каких-нибудь странных имён.
     /*
     if (!($ext = os::getFileExtension($source)))
       return;
     */
     // Правила перевода расширений в типы.
     $typemap = array('png' => 'image/png', 'jpg' => 'image/jpeg');
     foreach (Context::last()->config->getArray(self::confroot) as $name => $settings) {
         if (empty($ext)) {
             $target = $source . '.' . $name . '.' . $settings['format'];
         } else {
             $target = substr($source, 0, -strlen($ext)) . $name . '.' . $settings['format'];
         }
         if (file_exists($target)) {
             unlink($target);
         }
         $im = ImageMagick::getInstance();
         if ($im->open($source, $node->filetype)) {
             $options = array('downsize' => $settings['scalemode'] != 'crop', 'crop' => $settings['scalemode'] == 'crop', 'quality' => intval($settings['quality']));
             if ($im->scale($settings['width'], $settings['height'], $options)) {
                 if ($im->save($target, $typemap[$settings['format']])) {
                     $tmp = array('width' => $im->getWidth(), 'height' => $im->getHeight(), 'filename' => substr($target, strlen($storage) + 1), 'filesize' => filesize($target));
                     $result[$name] = $tmp;
                 }
             }
         }
     }
     return $result;
 }