1 <?php
2
3 4 5 6 7
8 class WatermarkImage extends Extension {
9
10 function () {}
11 12 13 14 15 16 17
18 public function Watermark() {
19 $original = $this->owner;
20
21 $path = $this->getWatermarkedPath();
22
23 if (!file_exists(Director::baseFolder() . '/' .$path)) {
24 $sc = SiteConfig::current_site_config();
25 $watermark = $sc->WatermarkImage();
26 $watermarkPosition = $sc->WatermarkPosition;
27 if (!$watermark || !$watermark->ID || !$watermarkPosition) {
28 user_error(_t('Watermark.CheckWatermarkSets','Check Watermark Settings'));
29 }
30
31 $watermarkGD = new GD($watermark->FullPath);
32 $watermarkWidth = $watermarkGD->getWidth();
33 $watermarkHeight = $watermarkGD->getHeight();
34
35 $image = new GD($original->FullPath);
36
37 $imageWidth = $image->getWidth();
38 $imageHeight = $image->getHeight();
39
40 switch($watermarkPosition) {
41 case 'center':
42 $destX = ((int)($imageWidth / 2)) - (int)($watermarkWidth / 2) - 0;
43 $destY = ((int)($imageHeight / 2)) - (int)($watermarkHeight / 2) - 0;
44 break;
45 case 'upperleft':
46 $destX = 0;
47 $destY = 0;
48 break;
49 case 'upperright':
50 $destX = $imageWidth - $watermarkWidth - 0;
51 $destY = 0;
52 break;
53 case 'lowerleft':
54 $destX = 0;
55 $destY = $imageHeight - $watermarkHeight - 0;
56 break;
57 case 'lowerright':
58 $destX = $imageWidth - $watermarkWidth - 0;
59 $destY = $imageHeight - $watermarkHeight - 0;
60 break;
61 }
62 <<<<<<< .mine
63 $output = $image->mergeAlpha($watermarkGD, $destX, $destY, 100);
64 =======
65 $output = $image->mergeAlpha($watermarkGD, $destX, $destY);
66 >>>>>>> .r4040
67 if ($output) {
68 $output->writeTo(Director::getAbsFile($path));
69 }
70 else {
71 return false;
72 }
73 }
74
75 $img = new Image_Cached($path);
76 $img->ID = $original->ID;
77 $img->ParentID = $original->ParentID;
78 return $img;
79 }
80
81 82 83 84 85
86 protected function getWatermarkedPath() {
87 if ($this->owner->ParentID == 0) {
88 $baseDir = ASSETS_PATH . '/';
89 } else {
90 $baseDir = $this->owner->Parent()->getFilename();
91 }
92 return $baseDir . '_resampled/' . md5($this->owner->getFilename()) . '-watermarked.png';
93
94 }
95
96 97 98 99 100
101 function deleteFormattedImages(& $numDeleted) {
102 $watemarkFileName = Director::getAbsFile($this->getWatermarkedPath());
103 if (is_file($watemarkFileName)) {
104 $numDeleted++;
105 unlink($watemarkFileName);
106 }
107
108
109 $cacheDir = dirname($watemarkFileName);
110
111 if(is_dir($cacheDir) && $handle = opendir($cacheDir)) {
112 $mask = basename($watemarkFileName);
113 $maskLength = strlen($mask);
114 while(($file = readdir($handle)) !== false) {
115 if(substr($file, 0, 1) != '.' && substr_compare($file, $mask, -$maskLength, $maskLength) == 0 && is_file($cacheDir . $file)) {
116 unlink($cacheDir . $file);
117 $numDeleted++;
118 }
119 }
120 closedir($handle);
121 }
122 }
123 }
124
[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.
-