programmer87
Создатель
- Регистрация
- 8 Фев 2007
- Сообщения
- 23
- Реакции
- 10
- Автор темы
- #1
До сегодняшнего дня ресайз картинок в NetCat так и не реализовали по-человечески, разве что в редакции 3.5 имеется полурабочий класс nc_imagetransform.class.php который пришлось править чтоб он работал
Выкладываю скрипты ресайза картинок, которые я в свое время писал под NetCat 2.4
Инструкция
В шаблон надо добавить поле типа "Файл", хранящее маленький рисунок, тип доступа поставить "Недоступно никому", имя поля согласовать с $thumbfield.
В дефолтный модуль следует добавить функцию изменения размера изображения, код которой несолькими постами выше.
При добавлении/изменении большой картинки в объекте, автоматом будет создаваться маленькая картинка. При удалении объекта, маленькая картинка удалится автоматически стандартными средствами NetCat.
Далее в файл /netcat/modules/default/function.inc.php следует добавить нижеприведенную функцию imageResize
После этого в Действии после добавления объекта вставляете следующий код
В действии после редактирования объекта, необходимо использовать нижеприведенный код
Добавлено через 4 минуты
Для ресайза картинок в системе версий 3.2 - 3.5 можно применить следующую методику ресайза картинок.
Для этих целей есть класс nc_ImageTransform, чтобы подключить этот класс
надо подкючить файл require_once($nc_core->INCLUDE_FOLDER."classes/nc_imagetransform.class.php");
в этом классе есть пара методов:
• imgResize($src_img, $dest_img, $width, $height, $mode=0, $format='jpg', $quality=90)
, где$src_img Путь к исходному изображению
$dest_img Путь к создаваемому изображению
$width Ширина нового изображения
$height Высота нового изображения
$mode [optional] Режим уменьшения: 0 - пропорционально уменьшает; 1 - вписывает в указанные размеры, обрезая края
$format [optional] Формат создаваемого изображения (jpg, gif, png)
$quality [optional] Качество сжатия изображения (0-100) при $format=='jpg'
В случае ошибки возвратит false иначе возвратит путь к созданному файлу
• createThumb($src_field_name, $dest_field_name, $width, $height, $mode=0, $format='jpg', $quality=90)
Функции для создания копий для полей типа файл,
в действиях после добавления, после изменения, где
$src_field_name - имя поля-источника
$dest_field_name - имя поля-приёмника
$width Ширина нового изображения
$height Высота нового изображения
$mode [optional] Режим уменьшения: 0 - пропорционально уменьшает; 1 - вписывает в указанные размеры, обрезая края
$format [optional] Формат создаваемого изображения (jpg, gif, png)
$quality [optional] Качество сжатия изображения (0-100) при $format=='jpg'
true в случае удачи, false - в случае ошибки.
пример в действии после добавления
Код:
поле Picture - с исходной картинкой
поле Preview - с получившимся превью
Выкладываю скрипты ресайза картинок, которые я в свое время писал под NetCat 2.4
Инструкция
В шаблон надо добавить поле типа "Файл", хранящее маленький рисунок, тип доступа поставить "Недоступно никому", имя поля согласовать с $thumbfield.
В дефолтный модуль следует добавить функцию изменения размера изображения, код которой несолькими постами выше.
При добавлении/изменении большой картинки в объекте, автоматом будет создаваться маленькая картинка. При удалении объекта, маленькая картинка удалится автоматически стандартными средствами NetCat.
Далее в файл /netcat/modules/default/function.inc.php следует добавить нижеприведенную функцию imageResize
Код:
function imageResize($src, $dest, $width, $height)
{
if (!file_exists($src)) return false;
$size = getimagesize($src);
if ($size === false) return false;
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
$ifunc = "image" . $format;
if (!function_exists($icfunc)) return false;
if (!function_exists($ifunc)) return false;
$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];
$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);
$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
$isrc = $icfunc($src);
$idest = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($idest, $isrc, 0, 0, 0, 0,
$new_width, $new_height, $size[0], $size[1]);
$ifunc($idest, $dest);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
После этого в Действии после добавления объекта вставляете следующий код
Код:
";
$thwidth=100; // ширина превьюшки
$thheight=100; // высота превьюшки
$picfileID=85; // ид поля шаблона большой картинки
$thumbfileID=84; // ид поля шаблона маленькой картинки
$messtable='Message2'; // таблица шаблона (MessageXX где XX - ид шаблона)
$thumbfield='Pic'; // название поля шаблона маленькой картинки
$pict_path=$DOCUMENT_ROOT."/netcat_files/".$sub."/".$cc."/";
$picfile=listQuery("SELECT Virt_Name, File_Path FROM Filetable WHERE Field_ID=".$picfileID." AND Message_ID=".$message,"/netcat_files\$data[File_Path]\$data[Virt_Name]");
if($picfile!="")
{
// большой рисунок есть, создаем маленький
$picfile=listQuery("SELECT Virt_Name FROM Filetable WHERE Field_ID=".$picfileID." AND Message_ID=".$message,"\$data[Virt_Name]");
$temp_virt_name=md5($filename.date("H:i:s d.m.Y").uniqid("netcat"));
if (imageResize($pict_path.$picfile,$pict_path.$temp_virt_name, $thwidth, $thheight) && file_exists($pict_path.$temp_virt_name))
{
$temp_thumb_size=@filesize($pict_path.$temp_virt_name);
if ($temp_thumb_size==0)
{
echo "<br>Ошибка! Файл превью существует, но его размер 0 байт.";
}
else
{
$temp_thumb_MIME=getimagesize($pict_path.$temp_virt_name);
$temp_thumb_realname=pathinfo(listQuery("SELECT Real_Name FROM Filetable WHERE Field_ID=".$picfileID." AND Message_ID=".$message, "\$data[Real_Name]"));
$temp_thumb_realname2=basename($temp_thumb_realname['basename'],".".$temp_thumb_realname['extension']);
listQuery("UPDATE ".$messtable." SET ".$thumbfield."='".$temp_thumb_realname2."_th.".$temp_thumb_realname['extension'].":".$temp_thumb_MIME['mime'].":".$temp_thumb_size."' WHERE Message_ID=".$message);
listQuery("INSERT INTO `Filetable` (`Real_Name` , `Virt_Name` , `File_Path` , `File_Type` , `File_Size` , `Message_ID` , `Field_ID` ) VALUES ('".$temp_thumb_realname2."_th.".$temp_thumb_realname['extension']."','".$temp_virt_name."','/".$sub."/".$cc."/','".$temp_thumb_MIME['mime']."',".$temp_thumb_size.",".$message.",$thumbfileID)");
}
}
}
echo "Объект сохранен.
<a href=/netcat/?catalogue=$catalogue&sub=$sub&cc=$cc>Вернуться</a>
В действии после редактирования объекта, необходимо использовать нижеприведенный код
Код:
";
$thwidth=250; // ширина превьюшки
$thheight=180; // высота превьюшки
$picfileID=722; // ид поля шаблона большой картинки
$thumbfileID=757; // ид поля шаблона маленькой картинки
$messtable='Message75'; // таблица шаблона (MessageXX где XX - ид шаблона)
$thumbfield='Imagem'; // название поля шаблона маленькой картинки
$DOCUMENT_ROOT='/home/axwell/data/www/undervud.axwell.ru';
$pict_path=$DOCUMENT_ROOT."/netcat_files/".$sub."/".$cc."/";
$picfile=listQuery("SELECT Virt_Name, File_Path FROM Filetable WHERE Field_ID=".$picfileID." AND Message_ID=".$message,"/netcat_files\$data[File_Path]\$data[Virt_Name]");
$thumbfile=listQuery("SELECT Virt_Name, File_Path FROM Filetable WHERE Field_ID=".$thumbfileID." AND Message_ID=".$message,"/netcat_files\$data[File_Path]\$data[Virt_Name]");
if ($picfile=="")
{
// рисунок или удален или его нет, следует убрать маленькую превьюшку
listQuery("UPDATE ".$messtable." SET ".$thumbfield."='' WHERE Message_ID =".$message);
listQuery("DELETE FROM filetable WHERE File_Path = '/".$sub."/".$cc."/' AND Field_ID =".$thumbfileID." AND Message_ID=".$message);
}
else
{
// большой рисунок есть, создаем/пересаздаем маленький
$picfile=listQuery("SELECT Virt_Name FROM Filetable WHERE Field_ID=".$picfileID." AND Message_ID=".$message,"\$data[Virt_Name]");
$temp_virt_name=md5($filename.date("H:i:s d.m.Y").uniqid("netcat"));
if (imageResize($pict_path.$picfile,$pict_path.$temp_virt_name, $thwidth, $thheight) && file_exists($pict_path.$temp_virt_name))
{
$temp_thumb_size=@filesize($pict_path.$temp_virt_name);
if ($temp_thumb_size==0)
{
echo "<br>Ошибка! Файл превью существует, но его размер 0 байт.";
}
else
{
$temp_thumb_MIME=getimagesize($pict_path.$temp_virt_name);
$temp_thumb_realname=pathinfo(listQuery("SELECT Real_Name FROM Filetable WHERE Field_ID=".$picfileID." AND Message_ID=".$message, "\$data[Real_Name]"));
$temp_thumb_realname2=basename($temp_thumb_realname['basename'],".".$temp_thumb_realname['extension']);
listQuery("UPDATE ".$messtable." SET ".$thumbfield."='".$temp_thumb_realname2."_th.".$temp_thumb_realname['extension'].":".$temp_thumb_MIME['mime'].":".$temp_thumb_size."' WHERE Message_ID=".$message);
$thumb_file_id=listQuery("SELECT ID FROM Filetable WHERE File_Path = '/".$sub."/".$cc."/' AND Field_ID =".$thumbfileID." AND Message_ID=".$message,"\$data[ID]");
if ($thumb_file_id){
@unlink($pict_path.listQuery("SELECT Virt_Name FROM Filetable WHERE ID=".$thumb_file_id,"\$data[Virt_Name]"));
listQuery("UPDATE `Filetable` SET Real_Name='".$temp_thumb_realname2."_th.".$temp_thumb_realname['extension']."',Virt_Name='".$temp_virt_name."',File_Path='/".$sub."/".$cc."/', File_Type='".$temp_thumb_MIME['mime']."',File_Size=".$temp_thumb_size." WHERE ID=".$thumb_file_id);
} else {
listQuery("INSERT INTO `Filetable` (`Real_Name` , `Virt_Name` , `File_Path` , `File_Type` , `File_Size` , `Message_ID` , `Field_ID` ) VALUES ('".$temp_thumb_realname2."_th.".$temp_thumb_realname['extension']."','".$temp_virt_name."','/".$sub."/".$cc."/','".$temp_thumb_MIME['mime']."',".$temp_thumb_size.",".$message.",$thumbfileID)");
}
}
}
}
echo "Объект изменен.
<a href=/netcat/?catalogue=$catalogue&sub=$sub&cc=$cc>Вернуться</a>
Добавлено через 4 минуты
Для ресайза картинок в системе версий 3.2 - 3.5 можно применить следующую методику ресайза картинок.
Для этих целей есть класс nc_ImageTransform, чтобы подключить этот класс
надо подкючить файл require_once($nc_core->INCLUDE_FOLDER."classes/nc_imagetransform.class.php");
в этом классе есть пара методов:
• imgResize($src_img, $dest_img, $width, $height, $mode=0, $format='jpg', $quality=90)
, где$src_img Путь к исходному изображению
$dest_img Путь к создаваемому изображению
$width Ширина нового изображения
$height Высота нового изображения
$mode [optional] Режим уменьшения: 0 - пропорционально уменьшает; 1 - вписывает в указанные размеры, обрезая края
$format [optional] Формат создаваемого изображения (jpg, gif, png)
$quality [optional] Качество сжатия изображения (0-100) при $format=='jpg'
В случае ошибки возвратит false иначе возвратит путь к созданному файлу
• createThumb($src_field_name, $dest_field_name, $width, $height, $mode=0, $format='jpg', $quality=90)
Функции для создания копий для полей типа файл,
в действиях после добавления, после изменения, где
$src_field_name - имя поля-источника
$dest_field_name - имя поля-приёмника
$width Ширина нового изображения
$height Высота нового изображения
$mode [optional] Режим уменьшения: 0 - пропорционально уменьшает; 1 - вписывает в указанные размеры, обрезая края
$format [optional] Формат создаваемого изображения (jpg, gif, png)
$quality [optional] Качество сжатия изображения (0-100) при $format=='jpg'
true в случае удачи, false - в случае ошибки.
пример в действии после добавления
Код:
Код:
if ($_FILES[f_Picture][size]!=0 && $_FILES[f_Picture][type]!='') { eval(listQuery("SELECT CustomSettings FROM Sub_Class WHERE Sub_Class_ID='$cc'","\$data[CustomSettings]")); global $nc_core; require_once($nc_core->INCLUDE_FOLDER."classes/nc_imagetransform.class.php"); nc_ImageTransform::createThumb('Picture','Preview',ширина,высота]); $photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'Picture', ""); if ($photo_path) nc_ImageTransform::imgResize($photo_path,$photo_path,ширина,высота);}
поле Picture - с исходной картинкой
поле Preview - с получившимся превью