Просмотр файла up/img.php

Размер файла: 14.24Kb
<?php	
require_once"../template/start.php";
require_once"../template/regglobals.php";
require_once"../template/config.php";
require_once"../template/functions.php";
require_once"../template/antidos.php";
require_once"../template/cookies.php";
require_once"../template/gzip.php";
require_once"../template/header.php";
require_once"../template/referer.php";

require_once "moduls/config.php";
require_once "moduls/functions.php";
require_once "moduls/connect.php";

$id = abs((int)$_GET['id']);
$type = check($_GET['type']);

$info = mysql_fetch_array(mysql_query("SELECT * FROM `".$preff."_files` WHERE `id` = '".$id."'"));

$image = "$info[fname].$info[format].$type";
$did = $info['infolder'];
$types = array(1 => "gif", 2 => "jpeg", 3 => "png", 4 => "jpg");
if($type!="img"){
$image = "$did/$info[fname].$info[format].$type";
} else {$image = "$did/$info[fname].$info[format]";}

if (is_file($image)){
if ($im_wd=="1"){
$types = array(1 => "gif", 2 => "jpeg", 3 => "png", 4 => "jpg");
$infom=getimagesize($image);
$image_create_handle = "imagecreatefrom".$types[$infom[2]];
list($widt, $heigt) = getimagesize($image);
if(isset($_GET['load'])){
$width=intval($_GET['w']);
$height=intval($_GET['h']);
}else{
if($widt>$width_im || $heigt>$height_im){
$width=$width_im;
$height=$height_im;
} else {
$width=$widt;
$height=$heigt;
}}
$im = $image_create_handle($image);

$dest = imagecreatetruecolor($width,$height);

imageCopyResampled($dest, $im, 0, 0, 0, 0, $width, $height, $widt, $heigt);

// вывод текста
// определяем координаты вывода текста
$size = $im_ts; // размер шрифта
$x_text = $width-imagefontwidth($size)*strlen($im_title)-3;
$y_text = $height-imagefontheight($size)-3;
// определяем каким цветом на каком фоне выводить текст
$white = imagecolorallocate($dest, 255, 255, 0);
$black = imagecolorallocate($dest, 0, 0, 0);
$gray = imagecolorallocate($dest, 127, 127, 127);
if (imagecolorat($dest,$x_text,$y_text)>$gray) {$color = $black;}
if (imagecolorat($dest,$x_text,$y_text)<$gray) {$color = $white;}
// выводим текст
imagestring($dest, $size, $x_text-1, $y_text-1, $im_title, $white-$color);
imagestring($dest, $size, $x_text+1, $y_text+1, $im_title, $white-$color);
imagestring($dest, $size, $x_text+1, $y_text-1, $im_title, $white-$color);
imagestring($dest, $size, $x_text-1, $y_text+1, $im_title, $white-$color);
imagestring($dest, $size, $x_text-1, $y_text, $im_title, $white-$color);
imagestring($dest, $size, $x_text+1, $y_text, $im_title, $white-$color);
imagestring($dest, $size, $x_text, $y_text-1, $im_title, $white-$color);
imagestring($dest, $size, $x_text, $y_text+1, $im_title, $white-$color);
imagestring($dest, $size, $x_text, $y_text, $im_title, $color);

header("Content-Type: image/jpeg");
imagejpeg($dest);
imagedestroy($dest);
imagedestroy($im);

} elseif ($im_water=="1"){
// Блок настроек модуля "по умолчанию"
define( 'NAME_WATER_IMAGE', 'moduls/img.gif'); // имя файла водяного знака, лучше всего формата GIF или PNG, тогда можно использовать прозрачные пиксели
define( 'SCALE_WATER_IMAGE', 80); // наибольшее отнощение размеров водяного знака по отношению к оригиналу, значение должно быть в диапазоне от 0 до 100
define( 'ALPHA_WATER_IMAGE', 100); // прозрачность водяного знака, 0 - полностью прозрачен, 100 - непрозрачен
define( 'VALIGN_WATER_IMAGE', $im_vertu); // вертикальное расположение водяного знака: top (по умолчанию, можно не прописывать), center, bottom
define( 'HALIGN_WATER_IMAGE', $im_gori); // горизонтальное расположение водяного знака: left (по умолчанию, можно не прописывать), center, right
define( 'FORMAT_OUT_IMAGE', 'jpeg'); // формат вывода результата, возможные значения: jpeg или png

// Те же самые параметры можно передавать в модуль через URL (после знака "?"):
// image - имя файла или URL картинки, на которую надо положить водяной знак, ОБЯЗАТЕЛЬНЫЙ параметр;
// nwi - имя файла или URL водяного знака, необязательный параметр, в случае его отсутствия используется NAME_WATER_IMAGE;
// swi - наибольшее отнощение размеров водяного знака по отношению к оригиналу, необязательный параметр, в случае его отсутствия используется SCALE_WATER_IMAGE;
// awi - прозрачность водяного знака, необязательный параметр, в случае его отсутствия используется ALPHA_WATER_IMAGE;
// vwi - вертикальное расположение водяного знака, значения см. как у VALIGN_WATER_IMAGE, необязательный параметр, в случае его отсутствия используется VALIGN_WATER_IMAGE;
// hwi - горизонтальное расположение водяного знака, значения см. как у HALIGN_WATER_IMAGE, необязательный параметр, в случае его отсутствия используется HALIGN_WATER_IMAGE.
// foi - формат вывода результата, значения см. как у FORMAT_OUT_IMAGE, необязательный параметр, в случае его отсутствия используется FORMAT_OUT_IMAGE.
//Важно! параметры, заданные из URL, имеют более высокий приоритет, чем параметры "по умолчанию".

//Примеры:
// 1. Наложение водяного знака на /images/path/pict.jpg, параметры принимают значения "по умолчанию"
//http://www.bla-bla-bla.ru/image_protect.php?image=http://www.bla-bla-bla.ru/images/path/pict.jpg
//
// 2. Наложение водяного знака на /images/path/pict.jpg, параметры указаны в URL
//http://www.bla-bla-bla.ru/image_protect.php?image=http://www.bla-bla-bla.ru/images/path/pict.jpg&nwi=bolt.png&swi=50&amp;awi=80&vwi=top&hwi=right&foi=jpeg
// 3. Применение в ocS: например, в функции tep_image(), первый параметр можно заменить следующим кодом:
// tep_href_link('image_protect.php', 'image=' . tep_href_link( DIR_WS_IMAGES . $path . 'pict.jpg') . '&amp;nwi=bolt.png&swi=50&amp;awi=80&vwi=top&hwi=right&foi=jpeg')
//
// Всё!!!
//***********************************************************

define( 'GIF_TYPE', '1');
define( 'JPG_TYPE', '2');
define( 'PNG_TYPE', '3');
define( 'WBMP_TYPE', '15');
define( 'XBM_TYPE', '16');

function open_and_create_image( $name_image ){

$image_identifier = 0;
$array_name_image = parse_url($name_image);
$name_image = (substr($array_name_image['path'], 0, 1)== '/') ? substr($array_name_image['path'], 1) : $array_name_image['path'];
list($width, $height, $type, $attr) = getimagesize( $name_image );
switch($type){
case GIF_TYPE:
$image_identifier = imagecreatefromgif ( $name_image );
break;
case JPG_TYPE:
$image_identifier = ImageCreateFromJPEG ( $name_image );
break;
case PNG_TYPE:
$image_identifier = imagecreatefrompng ( $name_image );
break;
case WBMP_TYPE:
$image_identifier = imagecreatefromwbmp ( $name_image );
break;
case XBM_TYPE:
$image_identifier = imagecreatefromxbm ( $name_image );
}
if ( !$image_identifier ) { // Обработка ошибки - нет текого файла или неподдерживаемый формат
$image_identifier = imagecreate (1000, 30); // создание пустого изображения
$bgc = imagecolorallocate ($image_identifier, 255, 255, 255);
$tc = imagecolorallocate ($image_identifier, 0, 0, 0);
imagefilledrectangle ($image_identifier, 0, 0, 1000, 30, $bgc);
imagestring ($image_identifier, 1, 5, 5, 'Ошибка загрузки ' . $name_image . ' или не поддерживаемый формат', $tc);
$width = 1000;
$height = 30;
}
return array( 'im' => $image_identifier,
'width' => $width,
'height' => $height
);
}

$name_water_image = NAME_WATER_IMAGE;
$scale_water_image = SCALE_WATER_IMAGE;
$alpha_water_image = ALPHA_WATER_IMAGE;
$valign_water_image = VALIGN_WATER_IMAGE;
$halign_water_image = HALIGN_WATER_IMAGE;
$format_out_image = FORMAT_OUT_IMAGE;

$water_img_param = open_and_create_image( $name_water_image );
$src_img_param = open_and_create_image($image);

$width=$src_img_param['width'];
$height=$src_img_param['height'];

if(isset($_GET['load'])){
$src_img_param['width']=intval($_GET['w']);
$src_img_param['height']=intval($_GET['h']);
}else{
if($src_img_param['width']>$width_im || $src_img_param['height']>$height_im){
$src_img_param['width']=$width_im;
$src_img_param['height']=$height_im;
} else {
$src_img_param['width']=$src_img_param['width'];
$src_img_param['height']=$src_img_param['height'];
}}

// Проверка и, если надо, масштабирование водяного знака
$hscale = $water_img_param['height'] / $src_img_param['height'];
$wscale = $water_img_param['width'] / $src_img_param['width'];
if (($hscale > $scale_water_image/100) || ($wscale > $scale_water_image/100)) {
$scale = ($scale_water_image / 100) / (($hscale > $wscale)?$hscale:$wscale);
$newheight= floor( $water_img_param['height'] * $scale);
$newwidth = floor( $water_img_param['width'] * $scale);
} else { // в противном случае, оставляем ширину и высоту такими же
$newheight= $water_img_param['height'];
$newwidth = $water_img_param['width'];
}

$tmp_img = imagecreatetruecolor( $newwidth, $newheight); // это - подложка для накладывания водяного знака
$white_color = imagecolorallocate ($tmp_img, 255, 255, 255); // что бы при копировании на подложку не вылезал непрозрачный фон, белым цветом ...
imagefilledrectangle ($tmp_img, 0, 0, $newwidth, $newheight, $white_color); // рисуем прямоугольник и ...
imagecolortransparent ($tmp_img, $white_color); // делаем этот цвет прозрачным
// и собсно, копируем вод.знак на подложку, параллельно масштабируя или нет..............
imagecopyresized($tmp_img, $water_img_param['im'], 0, 0, 0, 0, $newwidth, $newheight, $water_img_param['width'], $water_img_param['height']);
// теперь нам оригинальный имидж вод.знака не нужен - рушим его
imagedestroy($water_img_param['im']);
$water_img_param = array ( 'im' => $tmp_img,
'width' => $newwidth,
'height' => $newheight
);

// Копирование обеих картинок на подложку
$tmp_img = imagecreatetruecolor($src_img_param['width'], $src_img_param['height']); // это - подложка на которой будет все рисоваться
$white_color = imagecolorallocate ($tmp_img, 255, 255, 0); // что бы при копировании на подложку не вылезал непрозрачный фон, белым цветом ...
imagefilledrectangle ($tmp_img, 0, 0, $src_img_param['width'], $src_img_param['height'], $white_color); // рисуем прямоугольник и ...
imagecolortransparent ($tmp_img, $white_color); // делаем этот цвет прозрачным

imageCopyResampled($tmp_img, $src_img_param['im'], 0,0,0,0, $src_img_param['width'], $src_img_param['height'], $width, $height); // сперва кладем на нее оригинальную картинку

// считаем координаты для вставки вод. знака
$x_ins = $y_ins = 0;
switch ( $halign_water_image ){
case 'center' :
$x_ins = floor( ( $src_img_param['width'] - $water_img_param['width']) / 2 );
break;
case 'right' :
$x_ins = $src_img_param['width'] - $water_img_param['width'];
}
switch ( $valign_water_image ){
case 'center' :
$y_ins = floor( ( $src_img_param['height'] - $water_img_param['height']) / 2 );
break;
case 'bottom' :
$y_ins = $src_img_param['height'] - $water_img_param['height'];
}
// ну и кладем на подложку вод.знак в вычисленные координаты
imagecopymerge($tmp_img, $water_img_param['im'], $x_ins, $y_ins, 0, 0, $water_img_param['width'], $water_img_param['height'], $alpha_water_image);

// нужно вставить соответсвующий заголовок и послать результат в нужном формате
switch ( $format_out_image ){
case 'jpeg' :
case 'jpg' :
case 'JPEG' :
case 'JPG' :
header('content-type: image/jpeg');
ImageJPEG($tmp_img,'',100);
break;
case 'png' :
case 'PNG' :
header('content-type: image/png');
ImagePNG($tmp_img);
}

// напоследок все рушим....
imagedestroy($src_img_param['im']);
imagedestroy($water_img_param['im']);
imagedestroy($tmp_img);
}

if($im_wd=="0" && $im_water=="0"){
$types = array(1 => "gif", 2 => "jpeg", 3 => "png", 4 => "jpg");
$infom=getimagesize($image);
$image_create_handle = "imagecreatefrom".$types[$infom[2]];
list($widt, $heigt) = getimagesize($image);
if(isset($_GET['load'])){
$width=intval($_GET['w']);
$height=intval($_GET['h']);
}else{
if($widt>$width_im || $heigt>$height_im){
$width=$width_im;
$height=$height_im;
} else {
$width=$widt;
$height=$heigt;
}}
$im = $image_create_handle($image);

$dest = imagecreatetruecolor($width,$height);

imageCopyResampled($dest, $im, 0, 0, 0, 0, $width, $height, $widt, $heigt);

header("Content-Type: image/jpeg");
imagejpeg($dest);
imagedestroy($dest);
imagedestroy($im);
}

} else {header("Location: index.php?");}

?>