1 <?php
2
3 4 5 6 7 8 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
74
75
76
77
78
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