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

Работа с картинками и PHP

Страницы: 1  |  2  |  3
21.08.2006, 10:10
Гость
Гость

Возможно ли использовать GD библиотеку при работе с картинками, ну, чтоб не закачивать и большую, и маленькую? Наверняка уже были такие вопросы, что-то не нашел...

И еще, не могу разобраться с вставкой собственного PHP кода в шаблон.
Подключаю файл с собственными функциями, но в теле шаблона никакие переменные оттуда не видно. Что не так?
21.08.2006, 10:21
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Ivan писал(а):
Возможно ли использовать GD библиотеку при работе с картинками, ну, чтоб не закачивать и большую, и маленькую? Наверняка уже были такие вопросы, что-то не нашел...

Возможно, подключаете GD и используете...

Ivan писал(а):
И еще, не могу разобраться с вставкой собственного PHP кода в шаблон.
Подключаю файл с собственными функциями, но в теле шаблона никакие переменные оттуда не видно. Что не так?

Пример в студию!

Temet nosce...
21.08.2006, 10:24
VlastV
qb.digital

Зарегистрирован:
2005-11-02
Сообщений: 202

Ivan писал(а):
Возможно ли использовать GD библиотеку при работе с картинками, ну, чтоб не закачивать и большую, и маленькую? Наверняка уже были такие вопросы, что-то не нашел...

Не очень понятно, что ты хочешь. Если ты хочешь делать превью картинок на лету, то это считаеться не очень удачным методом.
Если тебя интересует создание превью картинок, на основе какой-то большой, загружаемый в шаблон... то могу тебе предложить такой вариант:
в файле function.inc.php модуля default впиши функцию:
Код:
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;

}

Данная функция создает уменьшенную картинку, того же типа что и исходный файл.
В поле шаблона "Действие после добавления объекта:" вставляешь такой код:
Код:
";
$picfile=listQuery("SELECT Virt_Name, File_Path FROM Filetable WHERE Field_ID=686 AND Message_ID=".$msgID,"/netcat_files$data[File_Path]$data[Virt_Name]");
imageResize($DOCUMENT_ROOT.$picfile,$DOCUMENT_ROOT.$picfile.'_sm', 300, 300);
echo "
Объект добавлена.<br>
<a href=/netcat/?catalogue=$catalogue&sub=$sub&cc=$cc>Вернуться</a>

Где "Field_ID=686" это идентификатор твоего поля, куда загружаеться большая картинка.
В поле шаблона "Действие после изменения объекта:" я не буду писать, что вставлять, пусть след читающие не много подумают, и научаться самиулыбка

Ivan писал(а):
И еще, не могу разобраться с вставкой собственного PHP кода в шаблон.
Подключаю файл с собственными функциями, но в теле шаблона никакие переменные оттуда не видно. Что не так?

Попробуй объявить свою переменную к которой хоче обратиться глобальной.
И не совсем понятно...
Ты "Подключаю файл с собственными функциями", к каким переменным ты доступ пытаешься получишь? если у тебя там функцииулыбка

Разработка сайтов на CMS NetCat. Портфолио http://vlastv.ru/ E-mail: me [at] vlastv [dot] ru ; ICQ: 66117050
22.08.2006, 15:26
Гость
Гость

Ага, вот оно как...
Все ясно, надо просто использовать для своих функций дефолтный модуль.
А я-то пытался инклудить.

Спасибо за пример, функция подобная имеется, а вот добавки в шаблон поизучаю как применить.
23.08.2006, 06:56
Гость
Гость

Работает, только проблемка с выводом созданных превьюшек.
Ситуация такая:
допустим, основная закачанная картинка хранится под именем xxxxxxxxxxx
Превью, соответственно, назначил xxxxxxxxxxx_t
В браузере основная достается по адресу h_xxxxxxxxxxx (прикол системы? откуда оно?).
Превью таким способом (добавляя в конец переменной '_t') не отображается.
Отображается только после вырезания 'h_'
То есть пока работает, но через ж..жесткую фильтрацию.
Может, есть проще способ? Что ето за 'h_' ?
24.01.2007, 12:23
Гость
Гость

а я сделал немного по другому
Цитата:

";
$picfile=listQuery("SELECT Virt_Name, File_Path FROM Filetable WHERE Field_ID=85 AND Message_ID=".$msgID,"/netcat_files$data[File_Path]$data[Virt_Name]");
$temp_thumb_rp=pathinfo($picfile);
$temp_virt_name=md5($filename.date("H:i:s d.m.Y").uniqid("netcat"));
if (imageResize($DOCUMENT_ROOT.$picfile,$DOCUMENT_ROOT.$temp_thumb_rp['dirname'].'/'.$temp_virt_name, 100, 100) && file_exists($DOCUMENT_ROOT.$temp_thumb_rp['dirname'].'/'.$temp_virt_name))
{
$temp_thumb_size=@filesize($DOCUMENT_ROOT.$temp_thumb_rp['dirname'].'/'.$temp_virt_name);
if ($temp_thumb_size==0)
{
echo "<br>Ошибка! Файл превью существует, но его размер 0 байт.";
}
else
{
$temp_thumb_MIME=getimagesize($DOCUMENT_ROOT.$temp_thumb_rp['dirname'].'/'.$temp_virt_name);
$temp_thumb_realname=pathinfo(listQuery("SELECT Real_Name ,File_Path FROM Filetable WHERE Field_ID=85 AND Message_ID=".$msgID,"$data[File_Path]$data[Real_Name]"));
listQuery("UPDATE Message2 SET Pic='".$temp_thumb_realname['basename']."_th.".$temp_thumb_realname['extension'].":".$temp_thumb_MIME['mime'].":".$temp_thumb_size."' WHERE Message_ID=".$msgID);
listQuery("INSERT INTO `filetable` (`Real_Name` , `Virt_Name` , `File_Path` , `File_Type` , `File_Size` , `Message_ID` , `Field_ID` ) VALUES ('".$temp_thumb_realname['basename']."_th.".$tempthumb_realname['extension']."', '".$temp_virt_name."', '".$temp_thumb_realname['dirname']."/', '".$temp_thumb_MIME['mime']."', '".$temp_thumb_size."', '".$msgID."', '84')");
}
}
echo "Объект добавлен.
<a href=/netcat/?catalogue=$catalogue&sub=$sub&cc=$cc>Вернуться</a>


в шаблоне добавил дополнительное поле для загрузки маленькой картинки, тип доступа поставил "Недоступно никому", и потом просто сделанную превьюшку туда загружаю, получается что при удалении объекта - она удалится сама.
Field_ID=85 - это ИД поля с большой картинкой
'84' - ид закрытого поля для маленькой картинки.
$temp_virt_name=md5($filename.date("H:i:s d.m.Y").uniqid("netcat")); - пришлось именовать маленькую картинку по неткатовскому принципу, т.к. именование из верхнего примера почемуто не подошло.
З.Ы.: привем сырой, еще толком неуспел проверить, если найдете ошибки, покажите плиз.
24.01.2007, 12:39
Гость
Гость

Message2 - это таблица шаблона (в данном случае новости)
24.01.2007, 19:12
Гость
Гость

Сразу приношу извинения за флуд, два предыдущих моих сообщения можно удалить.
Вот тут посидел и довел до ума.
Шаблон действия добавления:
Код:

";
$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($pictfile!="")
{
// большой рисунок есть, создаем маленький
$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]"));
listQuery("UPDATE ".$messtable." SET ".$thumbfield."='".$temp_thumb_realname['basename']."_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_realname['basename']."_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=100;
$thheight=100;
$picfileID=85;
$thumbfileID=84;
$messtable='Message2';
$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]");
$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 Pic = '' 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]"));
listQuery("UPDATE ".$messtable." SET ".$thumbfield."='".$temp_thumb_realname['basename']."_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 Real_Name FROM Filetable WHERE ID=".$thumb_file_id));
listQuery("UPDATE `filetable` SET Real_Name='".$temp_thumb_realname['basename']."_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_realname['basename']."_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>


В шаблон надо добавить поле типа "Файл", хранящее маленький рисунок, тип доступа поставить "Недоступно никому", имя поля согласовать с $thumbfield.
В дефолтный модуль следует добавить функцию изменения размера изображения, код которой несолькими постами выше.
При добавлении/изменении большой картинки в объекте, автоматом будет создаваться маленькая картинка. При удалении объекта, маленькая картинка удалится автоматически стандартными средствами Кота.
Было бы неплохо, если б чтото похожее добавили в ближайшие обновления.
04.02.2007, 13:15
Demon765

Зарегистрирован:
2006-11-20
Сообщений: 2

Спасибо огромное VIT улыбка

Немножко поправил твои примеры чтобы сразу работали:
1. В добавлении лишняя буква в переменной $pic(t)file
2. Конструкция
$temp_thumb_realname['basename']."_th.".$temp_thumb_realname['extension']
Возвращает следующее имяфайла.jpg_th.jpg
Используем следующую для правильности:
$temp_thumb_realname2=basename($temp_thumb_realname['basename'],".".$temp_thumb_realname['extension']);
$temp_thumb_realname2."_th.".$temp_thumb_realname['extension'] - дает правильное имя файла = имяфайла_th.jpg
3. В запросах следует везде писать имя базы с большой буквы (чувствительно)

Ну и правильный код пожалуйста:
На добавление:
Код:

";
$thwidth=135;
$thheight=200;
$picfileID=32;
$thumbfileID=33;
$messtable='Message5';
$thumbfield='ImageSmall';
$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]");
echo $picfile.'<br><br>';
if($picfile!='')
{
echo 'Идем дальше';
$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)");
}
}
}
else
{
}
echo "123 Объект сохранен.
<a href=/netcat/?catalogue=$catalogue&sub=$sub&cc=$cc>Вернуться</a>

11.02.2007, 10:53
Гость
Гость

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

Такое ощущение, что только создатели Netcat никогда не хотели сделать автоматическое создание превьюшек?
Учитывая легкость решения...
27.02.2007, 13:47
vika_rekhouse

Зарегистрирован:
2007-01-18
Сообщений: 9

Вопрос: а в каие именно поля вставлять код на добавление и изменение объекта?

И еще. Если у меня 3-4 картинки и загружая каждую нужно получать уменьшенное изображение, то 6-8 полей создавать? У меня на странице товара должна быть мини-фотогалерея. Соответственно меняющаяся в заивисимости от ID товара .

Подскажите как это лучше организовать? GD использовать не хочется...
198 196 2008-04-08 18:10:45 6889
Страницы: 1  |  2  |  3
Описание проекта