<?php
/*
PIMG USER MODULE
Athor: ton4y@abv.bg
Year: 2010
Status: private (only the author can change it)
Description:
This module allows you to remove a watermark or any other rectangular part of an image
by stretching it's corners together. You must specify the x and y start points and the
width, and height of the selection to be removed. By default the rectangle will be
removed and the left and right as well as the top and the bottom sides (1px thick,
inline) will be stretched and fused together.
*/
class pimg_mod_removewatermark
{
/* Resources */
private $pimg;
// PIMG constructor
function __construct($pimg)
{
$this -> pimg = $pimg;
}
/*
Removes the watermark
@param: $x - x of start point
@param: $y - y of start point
@param: $width - selection width
@param: $height - selection height
@result: a pointer to the caller pimg class for furthur usage
*/
function init($x, $y, $width, $height)
{
/* INPUT VALIDATORS */
if ($x < 0)
{
$this -> pimg -> setDebug('X start point must be > 0', 'notice', __CLASS__);
$x = 0;
}
if ($y < 0) {
$this -> pimg -> setDebug('Y start point must be > 0', 'notice', __CLASS__);
$y = 0;
}
if ($x + $width > $this -> pimg -> width()) {
$this -> pimg -> setDebug('X end point (x + width) must be <= than image\'s width', 'notice', __CLASS__);
$width = $this -> pimg -> width();
}
if ($y + $height > $this -> pimg -> height()) {
$this -> pimg -> setDebug('Y end point (y + height) must be <= than image\'s height', 'notice', __CLASS__);
$height = $this -> pimg -> height();
}
// Scan inline
$top = $this -> pimg -> scan($x, $y, $width, 1);
$right = $this -> pimg -> scan($x + $width, $y, 1, $height);
$bottom = $this -> pimg -> scan($x, $y + $height, $width, 1);
$left = $this -> pimg -> scan($x, $y, 1, $height);
// Draw pixels
for($i = $x; $i < $x + $width; $i++)
for($j = $y; $j < $y + $height; $j++)
$this
-> pimg
-> pixel($i, $j,
$this
-> pimg
-> color()
-> mix(array(
array(
$this
-> pimg
-> color()
-> mix(array(
array($top[$i - $x][0] -> color(), 100 - ($j - $y) / $height * 100),
array($bottom[$i - $x][0] -> color(), ($j - $y) / $height * 100)
)), 50),
array(
$this
-> pimg
-> color()
-> mix(array(
array($left[0][$j - $y] -> color(), 100 - ($i - $x) / $width * 100),
array($right[0][$j - $y] -> color(), ($i - $x) / $width * 100)
)), 50)
))
) -> draw($this -> pimg);
// PIMG callback
return $this -> pimg;
}
}
?>
|