aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorrvelices <rv-github@modusoptimus.com>2012-01-24 21:50:47 +0000
committerrvelices <rv-github@modusoptimus.com>2012-01-24 21:50:47 +0000
commitae80086a26b79c5226d4fee4226a94eb0ce6a2c8 (patch)
tree41d3642ac1affd227383850cf4713b585af99e34 /admin
parent7ee2cff811185cf2faca7aec6e9f703945a7f93c (diff)
feature 2548 multisize - watermark for imagick extension
git-svn-id: http://piwigo.org/svn/trunk@12956 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'admin')
-rw-r--r--admin/include/image.class.php59
1 files changed, 36 insertions, 23 deletions
diff --git a/admin/include/image.class.php b/admin/include/image.class.php
index 9a67b87b2..19b936afc 100644
--- a/admin/include/image.class.php
+++ b/admin/include/image.class.php
@@ -41,9 +41,9 @@ interface imageInterface
function rotate($rotation);
function resize($width, $height);
-
+
function sharpen($amount);
-
+
function compose($overlay, $x, $y, $opacity);
function write($destination_filepath);
@@ -96,7 +96,7 @@ class pwg_image
function pwg_resize($destination_filepath, $max_width, $max_height, $quality, $automatic_rotation=true, $strip_metadata=false, $crop=false, $follow_orientation=true)
{
$starttime = get_moment();
-
+
// width/height
$source_width = $this->image->get_width();
$source_height = $this->image->get_height();
@@ -118,7 +118,7 @@ class pwg_image
}
$this->image->set_compression_quality($quality);
-
+
if ($strip_metadata)
{
// we save a few kilobytes. For example a thumbnail with metadata weights 25KB, without metadata 7KB.
@@ -129,7 +129,7 @@ class pwg_image
{
$this->image->crop($resize_dimensions['crop']['width'], $resize_dimensions['crop']['height'], $resize_dimensions['crop']['x'], $resize_dimensions['crop']['y']);
}
-
+
$this->image->resize($resize_dimensions['width'], $resize_dimensions['height']);
if (isset($rotation))
@@ -182,23 +182,23 @@ class pwg_image
$width = $destWidth;
}
}
-
+
$ratio_width = $width / $max_width;
$ratio_height = $height / $max_height;
- $destination_width = $width;
+ $destination_width = $width;
$destination_height = $height;
-
+
// maximal size exceeded ?
if ($ratio_width > 1 or $ratio_height > 1)
{
if ($ratio_width < $ratio_height)
- {
+ {
$destination_width = round($width / $ratio_height);
$destination_height = $max_height;
}
else
- {
- $destination_width = $max_width;
+ {
+ $destination_width = $max_width;
$destination_height = round($height / $ratio_width);
}
}
@@ -232,16 +232,16 @@ class pwg_image
{
return null;
}
-
+
if (!function_exists('exif_read_data'))
{
return null;
}
$rotation = null;
-
+
$exif = exif_read_data($source_filepath);
-
+
if (isset($exif['Orientation']) and preg_match('/^\s*(\d)/', $exif['Orientation'], $matches))
{
$orientation = $matches[1];
@@ -274,7 +274,7 @@ class pwg_image
array(-1, $amount, -1),
array(-1, -1, -1),
);
-
+
$norm = array_sum(array_map('array_sum', $matrix));
for ($i=0; $i<3; $i++)
@@ -431,11 +431,24 @@ class image_imagick implements imageInterface
$m = pwg_image::get_sharpen_matrix($amount);
return $this->image->convolveImage($m);
}
-
+
function compose($overlay, $x, $y, $opacity)
{
- // todo
- return false;
+ $ioverlay = $overlay->image->image;
+ /*if ($ioverlay->getImageAlphaChannel() !== Imagick::ALPHACHANNEL_OPAQUE)
+ {
+ // Force the image to have an alpha channel
+ $ioverlay->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE);
+ }*/
+
+ global $dirty_trick_xrepeat;
+ if ( !isset($dirty_trick_xrepeat) && $opacity < 100)
+ {// NOTE: Using setImageOpacity will destroy current alpha channels!
+ $ioverlay->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA);
+ $dirty_trick_xrepeat = true;
+ }
+
+ return $this->image->compositeImage($ioverlay, Imagick::COMPOSITE_DISSOLVE, $x, $y);
}
function write($destination_filepath)
@@ -524,7 +537,7 @@ class image_ext_imagick implements imageInterface
function sharpen($amount)
{
$m = pwg_image::get_sharpen_matrix($amount);
-
+
$param ='convolve "'.count($m).':';
foreach ($m as $line)
{
@@ -535,7 +548,7 @@ class image_ext_imagick implements imageInterface
$this->add_command('morphology', $param);
return true;
}
-
+
function compose($overlay, $x, $y, $opacity)
{
$param = 'compose dissolve -define compose:args='.$opacity;
@@ -563,7 +576,7 @@ class image_ext_imagick implements imageInterface
$dest = pathinfo($destination_filepath);
$exec .= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"';
@exec($exec, $returnarray);
-
+
//echo($exec);
return is_array($returnarray);
}
@@ -685,7 +698,7 @@ class image_gd implements imageInterface
$m = pwg_image::get_sharpen_matrix($amount);
return imageconvolution($this->image, $m, 1, 0);
}
-
+
function compose($overlay, $x, $y, $opacity)
{
$ioverlay = $overlay->image->image;
@@ -694,7 +707,7 @@ class image_gd implements imageInterface
$ow = imagesx($ioverlay);
$oh = imagesy($ioverlay);
-
+
// Create a new blank image the site of our source image
$cut = imagecreatetruecolor($ow, $oh);