Как программно обрезать картинку в Drupal 7

Тэги: 

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

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

  1. function my_module_crop_image($uri, $presetname = '1000x1000', $temp_dir = FALSE) {
  2.  
  3. //если задана переменная $temp_dir, то создается обрезанная картинка в заданной директории, иначе обрезается существующая
  4. //функция file_unmanaged_copy() копирует картинку в нужную нам папку без записи в базу данных
  5. if ($temp_dir) {
  6. $uri = file_unmanaged_copy($uri, 'public://legion_cart_images', FILE_EXISTS_REPLACE);
  7. }
  8.  
  9. $image = image_load($uri);
  10.  
  11. $dimensions = array(
  12. 'width' => $image->info['width'],
  13. 'height' => $image->info['height'],
  14. );
  15.  
  16. //определяем новые размеры картинки
  17. //если этого не сделать, картинка отмасштабируется непропорционально
  18. image_style_transform_dimensions($presetname, &$dimensions);
  19.  
  20. $width = $dimensions['width'];
  21. $height = $dimensions['height'];
  22.  
  23. image_resize($image, $width, $height);
  24.  
  25. //возвращаем uri отмасштабированной картинки
  26. if (image_save($image)) {
  27. return $uri;
  28. } else {
  29. return FALSE;
  30. }
  31. }