1 <?php
  2 
  3 /**
  4  * Runde Ecken.
  5  *
  6  * @author staabm
  7  *
  8  * @package redaxo\media-manager
  9  */
 10 
 11 class rex_effect_rounded_corners extends rex_effect_abstract
 12 {
 13     public function execute()
 14     {
 15         $this->media->asImage();
 16         $gdimage = $this->media->getImage();
 17         $w = $this->media->getWidth();
 18         $h = $this->media->getHeight();
 19 
 20         $radius = [
 21             'tl' => $this->params['topleft'],
 22             'tr' => $this->params['topright'],
 23             'br' => $this->params['bottomright'],
 24             'bl' => $this->params['bottomleft'],
 25         ];
 26 
 27         $colour = 'ffffff';
 28 
 29         foreach ($radius as $k => $r) {
 30             if (empty($r) || $r < 0) {
 31                 continue;
 32             }
 33 
 34             $corner_image = imagecreatetruecolor($r, $r);
 35 
 36             $clear_colour = imagecolorallocate($corner_image, 0, 0, 0);
 37 
 38             $solid_colour = imagecolorallocate(
 39                 $corner_image,
 40                 hexdec(substr($colour, 0, 2)),
 41                 hexdec(substr($colour, 2, 2)),
 42                 hexdec(substr($colour, 4, 2))
 43             );
 44 
 45             imagecolortransparent($corner_image, $clear_colour);
 46 
 47             imagefill($corner_image, 0, 0, $solid_colour);
 48 
 49             imagefilledellipse($corner_image, $r, $r, $r * 2, $r * 2, $clear_colour);
 50 
 51             switch ($k) {
 52                 case 'tl':
 53                     imagecopymerge($gdimage, $corner_image, 0, 0, 0, 0, $r, $r, 100);
 54                     break;
 55 
 56                 case 'tr':
 57                     $corner_image = imagerotate($corner_image, 270, 0);
 58                     imagecopymerge($gdimage, $corner_image, $w - $r, 0, 0, 0, $r, $r, 100);
 59                     break;
 60 
 61                 case 'br':
 62                     $corner_image = imagerotate($corner_image, 180, 0);
 63                     imagecopymerge($gdimage, $corner_image, $w - $r, $h - $r, 0, 0, $r, $r, 100);
 64                     break;
 65 
 66                 case 'bl':
 67                     $corner_image = imagerotate($corner_image, 90, 0);
 68                     imagecopymerge($gdimage, $corner_image, 0, $h - $r, 0, 0, $r, $r, 100);
 69                     break;
 70             }
 71         }
 72 
 73         // Transparenz erhalten
 74         //$this->keepTransparent($des);
 75         //imagecopyresampled($des, $gdimage, 0, 0, $offset_width, $offset_height, $this->params['width'], $this->params['height'], $this->params['width'], $this->params['height']);
 76 
 77         //$gdimage = $des;
 78         //$this->image->refreshDimensions();
 79     }
 80 
 81     public function getName()
 82     {
 83         return rex_i18n::msg('media_manager_effect_rounded_corners');
 84     }
 85 
 86     public function getParams()
 87     {
 88         return [
 89             [
 90                 'label' => rex_i18n::msg('media_manager_effect_rounded_corners_topleft'),
 91                 'name' => 'topleft',
 92                 'type' => 'int',
 93             ],
 94             [
 95                 'label' => rex_i18n::msg('media_manager_effect_rounded_corners_topright'),
 96                 'name' => 'topright',
 97                 'type' => 'int',
 98             ],
 99             [
100                 'label' => rex_i18n::msg('media_manager_effect_rounded_corners_bottomleft'),
101                 'name' => 'bottomleft',
102                 'type' => 'int',
103             ],
104             [
105                 'label' => rex_i18n::msg('media_manager_effect_rounded_corners_bottomright'),
106                 'name' => 'bottomright',
107                 'type' => 'int',
108             ],
109         ];
110     }
111 }
112