![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
16/02/2008, 23:46
|
![Avatar de elfran222](http://static.forosdelweb.com/customavatars/avatar140503_1.gif) | | | Fecha de Ingreso: junio-2006
Mensajes: 550
Antigüedad: 18 años, 8 meses Puntos: 7 | |
Re: Subir Imagen Continuación class.upload.php
Código:
/**
* Translate error messages
*
* @access private
* @param string $str Message to translate
* @param array $tokens Optional token values
* @return string Translated string
*/
function translate($str, $tokens = array()) {
if (array_key_exists($str, $this->translation)) $str = $this->translation[$str];
if (is_array($tokens) && sizeof($tokens) > 0) $str = vsprintf($str, $tokens);
return $str;
}
/**
* Creates a container image
*
* @access private
* @param integer $x Width
* @param integer $y Height
* @param boolean $fill Optional flag to draw the background color or not
* @param boolean $trsp Optional flag to set the background to be transparent
* @return resource Container image
*/
function imagecreatenew($x, $y, $fill = true, $trsp = false) {
if ($this->gdversion() >= 2 && !$this->image_is_palette) {
// create a true color image
$dst_im = imagecreatetruecolor($x, $y);
// this preserves transparency in PNGs, in true color
if (empty($this->image_background_color) || $trsp) {
imagealphablending($dst_im, false );
imagefilledrectangle($dst_im, 0, 0, $x, $y, imagecolorallocatealpha($dst_im, 0, 0, 0, 127));
}
} else {
// creates a palette image
$dst_im = imagecreate($x, $y);
// preserves transparency for palette images, if the original image has transparency
if (($fill && $this->image_is_transparent && empty($this->image_background_color)) || $trsp) {
imagefilledrectangle($dst_im, 0, 0, $x, $y, $this->image_transparent_color);
imagecolortransparent($dst_im, $this->image_transparent_color);
}
}
// fills with background color if any is set
if ($fill && !empty($this->image_background_color) && !$trsp) {
sscanf($this->image_background_color, "#%2x%2x%2x", $red, $green, $blue);
$background_color = imagecolorallocate($dst_im, $red, $green, $blue);
imagefilledrectangle($dst_im, 0, 0, $x, $y, $background_color);
}
return $dst_im;
}
/**
* Transfers an image from the container to the destination image
*
* @access private
* @param resource $src_im Container image
* @param resource $dst_im Destination image
* @return resource Destination image
*/
function imagetransfer($src_im, $dst_im) {
if (is_resource($dst_im)) imagedestroy($dst_im);
$dst_im = & $src_im;
return $dst_im;
}
/**
* Merges two images
*
* If the output format is PNG, then we do it pixel per pixel to retain the alpha channel
*
* @access private
* @param resource $dst_img Destination image
* @param resource $src_img Overlay image
* @param int $dst_x x-coordinate of destination point
* @param int $dst_y y-coordinate of destination point
* @param int $src_x x-coordinate of source point
* @param int $src_y y-coordinate of source point
* @param int $src_w Source width
* @param int $src_h Source height
* @param int $pct Optional percentage of the overlay, between 0 and 100 (default: 100)
* @return resource Destination image
*/
function imagecopymergealpha(&$dst_im, &$src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct = 0) {
$dst_x = (int) $dst_x;
$dst_y = (int) $dst_y;
$src_x = (int) $src_x;
$src_y = (int) $src_y;
$src_w = (int) $src_w;
$src_h = (int) $src_h;
$pct = (int) $pct;
$dst_w = imagesx($dst_im);
$dst_h = imagesy($dst_im);
for ($y = $src_y; $y < $src_h; $y++) {
for ($x = $src_x; $x < $src_w; $x++) {
if ($x >= 0 && $x <= $dst_w && $y >= 0 && $y <= $dst_h) {
$dst_pixel = imagecolorsforindex($dst_im, imagecolorat($dst_im, $x + $dst_x, $y + $dst_y));
$src_pixel = imagecolorsforindex($src_im, imagecolorat($src_im, $x + $src_x, $y + $src_y));
$src_alpha = 1 - ($src_pixel['alpha'] / 127);
$dst_alpha = 1 - ($dst_pixel['alpha'] / 127);
$opacity = $src_alpha * $pct / 100;
if ($dst_alpha >= $opacity) $alpha = $dst_alpha;
if ($dst_alpha < $opacity) $alpha = $opacity;
if ($alpha > 1) $alpha = 1;
if ($opacity > 0) {
$dst_red = round(( ($dst_pixel['red'] * $dst_alpha * (1 - $opacity)) ) );
$dst_green = round(( ($dst_pixel['green'] * $dst_alpha * (1 - $opacity)) ) );
$dst_blue = round(( ($dst_pixel['blue'] * $dst_alpha * (1 - $opacity)) ) );
$src_red = round((($src_pixel['red'] * $opacity)) );
$src_green = round((($src_pixel['green'] * $opacity)) );
$src_blue = round((($src_pixel['blue'] * $opacity)) );
$red = round(($dst_red + $src_red ) / ($dst_alpha * (1 - $opacity) + $opacity));
$green = round(($dst_green + $src_green) / ($dst_alpha * (1 - $opacity) + $opacity));
$blue = round(($dst_blue + $src_blue ) / ($dst_alpha * (1 - $opacity) + $opacity));
if ($red > 255) $red = 255;
if ($green > 255) $green = 255;
if ($blue > 255) $blue = 255;
$alpha = round((1 - $alpha) * 127);
$color = imagecolorallocatealpha($dst_im, $red, $green, $blue, $alpha);
imagesetpixel($dst_im, $x + $dst_x, $y + $dst_y, $color);
}
}
}
}
return true;
}
/**
* Actually uploads the file, and act on it according to the set processing class variables
*
* This function copies the uploaded file to the given location, eventually performing actions on it.
* Typically, you can call {@link process} several times for the same file,
* for instance to create a resized image and a thumbnail of the same file.
* The original uploaded file remains intact in its temporary location, so you can use {@link process} several times.
* You will be able to delete the uploaded file with {@link clean} when you have finished all your {@link process} calls.
*
* According to the processing class variables set in the calling file, the file can be renamed,
* and if it is an image, can be resized or converted.
*
* When the processing is completed, and the file copied to its new location, the
* processing class variables will be reset to their default value.
* This allows you to set new properties, and perform another {@link process} on the same uploaded file
*
* If the function is called with a null or empty argument, then it will return the content of the picture
*
* It will set {@link processed} (and {@link error} is an error occurred)
*
* @access public
* @param string $server_path Optional path location of the uploaded file, with an ending slash
* @return string Optional content of the image
*/
function process($server_path = null) {
$this->error = '';
$this->processed = true;
$return_mode = false;
$return_content = null;
|