Version: current

     1 <?php
     2
     3 /**
     4  * Задача для автоматического приведения размеров картинок не больше максимального
     5  * запускать: sake /dev/tasks/ImageResizeTask
     6  *
     7  * @author dvp
     8  */
     9
    10 class ImageResizeTask extends BuildTask {
    11
    12     protected $title = 'Auto resize big images';
    13
    14     protected $description = "Уменьшает размеры всех картинок сайта до указанных в конфиге сайта с помощью расширения ImageAutoResize<br/>
    15 в конфиге сайта можно задать:
    16 <ul>
    17 <li>ImageAutoResize::set_max_size(1000, 800) - максимальный размер загружаемой на сайт картинки (все что больше будет масштабироваться)</li>
    18 <li>ImageAutoResize::set_quality(85) - качество JPG картинок</li>
    19 <li>ImageAutoResize::disable() - запретить автоматическое масштабирование</li>
    20 </ul>   ";
    21
    22     function init() {
    23         if (!(Director::isDev() || Director::is_cli() || Permission::check("ADMIN")))
    24             return Security::permissionFailure($this);
    25
    26         parent::init();
    27     }
    28
    29     function run($request) {
    30         if (!Director::is_cli()) return 'Задача может быть запущена только с консоли';
    31         $bytes = 0;
    32         echo "Image quality: " . ImageAutoResize::quality() . "%\n\n";
    33         foreach (DataObject::get('Image') as $image) {
    34             $filename = $image->getFullPath();
    35             list($oldWidtgh, $oldHeight) = getimagesize($filename);
    36             $oldSize = filesize($filename);
    37             if ($image->doAutoResize()) {
    38                 list($newWidtgh, $newHeight) = getimagesize($filename);
    39                 $newSize = filesize($filename);
    40                 $delta = $newSize-$oldSize;
    41                 $bytes -= $delta;
    42                 $unit = 'b';
    43                 if (abs($delta) > 1024) {
    44                     $delta = ceil($delta/1024);
    45                     $unit = 'Kb';
    46                 }
    47                 printf("%-90s: (%4d, %4d) -> (%4d, %4d) = %3d%% (%+d %s)\n",
    48                     $filename, $oldWidtgh, $oldHeight, $newWidtgh, $newHeight, round(100*$newSize/$oldSize), $delta, $unit
    49                 );
    50             }
    51         }
    52         echo "\nTotal economy: ";
    53         echo ($bytes > 1024*1024) ? ceil($bytes/1024/1024)."Mb\n" : ceil($bytes/1024)."Kb\n";
    54     }
    55 }
    56

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -