Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Netcat уменьшенное изображение.

10.12.2010, 21:13
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

Подскажите как убрать в netcat символ "_" при ресайзе картинок, вернее заменить на "-"
А то уже замучался.

nc_imagetransform.class.php


Создает уменьшенные с названием "kartinka_moya_thumb.jpg"
А сделать "kartinka-moya-thumb.jpg"


Спасибо тем кто отзоветься.
10.12.2010, 21:14
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

<?php

/**
* Класс для изменения изображений
*
* <p>Класс содержит статические методы для работы с изображениями:
* <b>imgResize</b> - созданием уменьшенной копии изображения</p>
* этот класс наследуется от <b>nc_System</b>
*
* @see nc_ImageTransform::imgResize()
*/
class nc_ImageTransform extends nc_System {

protected static $_db;

/**
*
* Создает уменьшенную копию изображения
* @access public
* @static
* @param string $src_img Путь к исходному изображению
* @param string $dest_img Путь к создаваемому изображению
* @param int $width Ширина нового изображения
* @param int $height Высота нового изображения
* @param int $mode [optional] Режим уменьшения: 0 - пропорционально уменьшает; 1 - вписывает в указанные размеры, обрезая края
* @param string $format [optional] Формат создаваемого изображения (jpg, gif, png)
* @param int $quality [optional] Качество сжатия изображения (0-100) при $format=='jpg'
* @return mixed В случае ошибки возвратит false иначе возвратит путь к созданному файлу
*/
public static function imgResize($src_img, $dest_img, $width, $height, $mode=1, $format='jpg', $quality=100, $message_id = 0, $field = 0) {

$nc_core = nc_Core::get_object();

if (!file_exists($src_img)) return false;
$img_size = getimagesize($src_img);
if ($img_size === false) return false;

$img_format = strtolower(substr($img_size['mime'], strpos($img_size['mime'], '/') + 1));
if (!function_exists($fn_imgcreatefrom = 'imagecreatefrom'.$img_format)) return false;

$x_ratio = $width / $img_size[0];
$y_ratio = $height / $img_size[1];

$fn_extrem = $mode ? 'max' : 'min';
$ratio = $fn_extrem($x_ratio, $y_ratio);

$new_width = $x_ratio == $ratio ? $width : floor($img_size[0] * $ratio);
$new_height = $x_ratio != $ratio ? $height : floor($img_size[1] * $ratio);
$new_left = $x_ratio == $ratio || !$mode ? 0 : floor(($width - $new_width) / 2);
$new_top = $x_ratio != $ratio || !$mode ? 0 : floor(($height - $new_height) / 2);

$gd_dest_img = imagecreatetruecolor($mode?$width:$new_width, $mode?$height:$new_height);
$gd_src_img = $fn_imgcreatefrom($src_img);

imagecopyresampled($gd_dest_img, $gd_src_img, $new_left, $new_top, 0, 0, $new_width, $new_height, $img_size[0], $img_size[1]);
switch ($format) {
case 'gif': imagegif ($gd_dest_img, $dest_img); break;
case 'png': imagepng ($gd_dest_img, $dest_img); break;
default: imagejpeg($gd_dest_img, $dest_img, $quality); break;
}
imagedestroy($gd_dest_img);
imagedestroy($gd_src_img);

// нужно поменять размер в таблице Filetable
$HTTP_FILES_PATH_PREG = str_replace("/", "\/", $nc_core->HTTP_FILES_PATH);
// есть файл в защищенной фс
if (preg_match("/".$HTTP_FILES_PATH_PREG."([0-9uct]+)\/([0-9]+\/)?([0-9A-Z]{32})/i", $dest_img, $matches)) {

$filename = $matches[3];
$size = filesize($dest_img);

$nc_core->db->query("UPDATE `Filetable`
SET `File_Size` = '".intval($size)."'
WHERE `Virt_Name` = '".$nc_core->db->escape($filename)."' ");
}


// обновление таблицы MessageXX, User
$message_id = intval($message_id);
if ( $message_id && $field ) {
// информация о поле
$fld = $nc_core->db->get_row("SELECT `Class_ID`, `System_Table_ID`, `Field_Name`
FROM `Field`
WHERE `Field_ID` = '".intval($field)."'
OR `Field_Name` = '".$nc_core->db->escape($field)."'
LIMIT 1", ARRAY_A);
// определение имени таблицы
if ( $fld['Class_ID'] ) {
$table = 'Message'.intval($fld['Class_ID']);
$where = " `Message_ID` = '".$message_id."' ";
}
else {
$table = $nc_core->db->get_var("SELECT `System_Table_Name` FROM `System_Table` WHERE `System_Table_ID` = '".intval($fld['System_Table_ID'])."' ");
$where = " `".$table."_ID` = '".$message_id."' ";

}

if ( !$table ) {
return false;
}
// текущее значение поля объекта
$value = $nc_core->db->get_var("SELECT `".$fld['Field_Name']."` FROM `".$table."` WHERE ".$where." ");

if ( !$value ) {
return false;
}
// обновляем размер
$size = filesize($dest_img);
$value = nc_preg_replace("/:[0-9]+/", ":".$size, preg_quote($value), 1);

$nc_core->db->query("UPDATE `".$table."` SET `".$fld['Field_Name']."` = '".$nc_core->db->escape($value)."' WHERE ".$where." ");
}


return $dest_img;
}

/**
* Функции для создания thumbnails для полей типа файл,
* в действиях после добавления, после изменения.
*
* @global array $GLOBALS
* @global string $FILES_FOLDER
* @param string $src_field_name - имя поля-источника
* @param string $dest_field_name - имя поля-приёмника
* @param int $width Ширина нового изображения
* @param int $height Высота нового изображения
* @param int $mode [optional] Режим уменьшения: 0 - пропорционально уменьшает; 1 - вписывает в указанные размеры, обрезая края
* @param string $format [optional] Формат создаваемого изображения (jpg, gif, png)
* @param int $quality [optional] Качество сжатия изображения (0-100) при $format=='jpg'
*
* @return bool true в случае удачи, false - в случае ошибки.
* @access public
* @static
*/

public static function createThumb($src_field_name, $dest_field_name, $width, $height, $mode=1, $format='jpg', $quality=100) {

global $GLOBALS;
global $message, $classID;

$src_field_id = $GLOBALS['fldID'][array_search($src_field_name, $GLOBALS['fld'])];
$dest_field_id = $GLOBALS['fldID'][array_search($dest_field_name, $GLOBALS['fld'])];

return self::createThumb_byID($classID, $message, $src_field_id, $dest_field_id, $width, $height,$mode,$format,$quality, $src_field_name);
}
/**
* Функции для создания thumbnails для полей типа файл
*
*
* @global object $nc_core
* @param int $classID - идентифиактор класса (компонента)
* @param int $message - номер объекты
* @param int $field_src_id - идентификатор поля источника
* @param int $field_dst_id - идентификатор поля приемника
* @param int $width Ширина нового изображения
* @param int $height Высота нового изображения
* @param int $mode [optional] Режим уменьшения: 0 - пропорционально уменьшает; 1 - вписывает в указанные размеры, обрезая края
* @param string $format [optional] Формат создаваемого изображения (jpg, gif, png)
* @param int $quality [optional] Качество сжатия изображения (0-100) при $format=='jpg'
* @param string $field_name_src
* @return bool true в случае удачи, false - в случае ошибки.
* @access public
* @static
*/
public static function createThumb_byID($classID,$message,$field_src_id, $field_dst_id, $width, $height, $mode=1, $format='jpg', $quality=100,$field_name_src='') {
global $nc_core;

// проверка аргументов
$message += 0;
$field_src_id += 0;
$field_dst_id += 0;
$classID += 0;
if ( !$message || !$field_src_id || !$field_dst_id || !$classID ) return false;

# поиск исходного файла
// латинское имя поля
if ( !$field_name_src ) { $field_name_src = $nc_core->db->get_var("SELECT `Field_Name` FROM `Field` WHERE `Field_ID` = '".$field_src_id."'"); }
if ( !$field_name_src ) return 0;

// Значение поля в таблице объектов
$message_field = $nc_core->db->get_row("SELECT * FROM `Message".$classID."` WHERE `Message_ID` = '".$message."'", ARRAY_A);
$file_data = explode(':', $message_field[$field_name_src]);
$file_name = $file_data[0];
$file_type = $file_data[1];
$file_size = $file_data[2];
$ext = substr($file_name, strrpos($file_name, ".")); // расширение файла
$file_name = substr($file_name, 0, strrpos($file_name, ".")); // имя файла без расширения.
// если ли файл в Filetable ?
$filetable = $nc_core->db->get_row("SELECT * FROM `Filetable`
WHERE `Message_ID` = '".intval($message)."' AND `Field_ID` = '".intval($field_src_id)."'", ARRAY_A);
// определения полного пути к файлу
if ( $filetable ) { // исходный файл в protected
$path_src = rtrim($nc_core->FILES_FOLDER, '/').$filetable['File_Path'].$filetable['Virt_Name'];
}
else {
if ( $file_data[3] ) { // orignal
$path_src = $nc_core->FILES_FOLDER.$file_data[3];
}
else { // simple
$path_src = $nc_core->FILES_FOLDER.$field_src."_".$message.$ext;
}
}

// получение информации о поле-приемника
$field_info_desc = $nc_core->db->get_row("SELECT `Field_Name`, `Format` FROM `Field` WHERE `Field_ID` = '".$field_dst_id."'", ARRAY_A);
if ( !$field_info_desc) return false;

//удаление старого файла
require_once($nc_core->INCLUDE_FOLDER."s_files.inc.php");
DeleteFile($field_dst_id, $field_info_desc['Field_Name'], $classID, 0, $message);

// определение типа фс применика
$fs = nc_field_parse_format($field_info_desc['Format'], NC_FIELDTYPE_FILE);
$fs = $fs['fs'];

$file_name.="-thumb";
// определние имени файла на диске и диретории

switch ( $fs ) {
case NC_FS_PROTECTED:
$path_dsc = $message_field['Subdivision_ID'].'/'.$message_field['Sub_Class_ID'].'/';
$name_dsc = md5($file_name.date("H:i:s d.m.Y").uniqid("netcat"));
break;
case NC_FS_ORIGINAL:
$path_dsc = $message_field['Subdivision_ID'].'/'.$message_field['Sub_Class_ID'].'/';
$name_dsc = nc_get_filename_for_original_fs($file_name.".".$format, $nc_core->FILES_FOLDER.$path_dsc);
break;
case NC_FS_SIMPLE:
$path_dsc = '';
$name_dsc = $field_dst."_".$message.$ext;
break;
}

// копирование файла
//copy($path_src, $nc_core->FILES_FOLDER.$path_dsc.$name_dsc);
// создание thumb
$path_dest = $nc_core->FILES_FOLDER.$path_dsc.$name_dsc;
self::imgResize($path_src, $path_dest, $width, $height, $mode, $format, $quality);

switch ( $fs ) {
case NC_FS_PROTECTED :
$img_size = getimagesize($path_dest);
if ($img_size === false) {
if ( file_exists($path_dest) ) unlink($path_dest);
return false;
}
$dst_File_Type = $img_size['mime'];
$dst_File_Size = filesize($path_dest);
$insert_filetable_sql = "INSERT INTO `Filetable`(Real_Name, Virt_Name, File_Path, File_Type, File_Size, Message_ID, Field_ID)
VALUES('".$file_name.".".$format."', '".$name_dsc."', '/".$path_dsc."','".$dst_File_Type."', '".$dst_File_Size."', '".$message."', '".$field_dst_id."')";

$nc_core->db->query($insert_filetable_sql);
$in_db = $file_name.":".$dst_File_type.":".$dst_File_size; // то, что запишится в БД
break;
case NC_FS_ORIGINAL :
$in_db = $file_name.".".$format.":".$format.":".$file_size; // то, что запишится в БД
$in_db .= ":".$path_dsc.$name_dsc;
break;
default :
$in_db = $file_name.".".$format.":".$format.":".$file_size; // то, что запишится в БД
break;
}
// обновление инфы в БД
$nc_core->db->query("UPDATE `Message".$classID."` SET `".$field_info_desc['Field_Name']."` = '".$in_db."' WHERE `Message_ID` = '".$message."'");

return true;
}
}
?>
11.12.2010, 00:29
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

Help me =(
11.12.2010, 02:42
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

Решил, кому надо icq 445224 помогу.
198 196 2010-12-11 02:42:09 10905
Описание проекта