Регистрация
Вход через соцсети
Восстановление пароля

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

Страницы: 1  |  2  |  3
30.06.2007, 15:37
Гость
Гость

Господа, решил воплотить данный пример в действительность, почти получилось. улыбка
Проблемка возникла одна: при изменении объекта генерится превьюшка, из базы старая удаляется, а вот на диске физически остается...

Подскажите, умельцы улыбка
30.06.2007, 18:17
avp
Дидык Алексей

Зарегистрирован:
2007-05-14
Сообщений: 30

Уже и сам разобрался...
В шаблоне изменение строку
Код:
@unlink($pict_path.listQuery("SELECT Real_Name FROM Filetable WHERE ID=".$thumb_file_id));
заменить на
Код:
@unlink($pict_path.listQuery("SELECT Virt_Name FROM Filetable WHERE ID=".$thumb_file_id,"$data[Virt_Name]"));


Зато возник следующий вопрос улыбка
У меня в шаблоне несколько картинок. Как быть в таком случае? Не для каждой же писать такой код...
18.07.2007, 05:18
User_x

Зарегистрирован:
2007-06-20
Сообщений: 1

Спасибо большое за идеи из исходников.
Аналогично делюсь сотворённым на основе выше написанного.
Моя задача была:
есть N-полей в шаблоне, куда грузятся картинки,
нужно добавить ещё N-малых и ещё N-средних превьюшек.
Как реализовал:
функция, в которую указываем из какого поля брать и куда класть картинки. Попутно внутри функции убираются линки и файлы от предыдущих превьюшек, это позволяет использовать функцию и в действиях после изменения.
Плюсы: можно добавить в уже живой проект.
просто использовать - натравил на массивы ID полей, она сама всё пожрёт.
Минусы: жрёт всё, даже то что не нужно (нет проверки, надо или не надо создавать превьюшку, т.е. менялась картинка или её не трогали). Но такую проверку можно реализовать снаружи функции.

Комментами она не богата, потому что времени не хва...

function.inc.php
Код:
<?
function resizeimg($filename, $smallimage, $w, $h, $q)
{
// нашёл в inete - автору Спасибо
// http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5173
$ratio=$w/$h;
$size_img=getimagesize($filename);
$src_ratio=$size_img[0]/$size_img[1];
if($ratio<$src_ratio) $h=$w/$src_ratio;
else $w=$h*$src_ratio;
$dest_img=imagecreatetruecolor($w,$h);
$white=imagecolorallocate($dest_img, 255, 255, 255);
if($size_img[2]==2) $src_img=imagecreatefromjpeg($filename);
elseif($size_img[2]==1) $src_img=imagecreatefromgif($filename);
elseif($size_img[2]==3) $src_img=imagecreatefrompng($filename);
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
if($size_img[2]==2) imagejpeg($dest_img, $smallimage,$q);
elseif($size_img[2]==1) imagegif($dest_img, $smallimage,$q);
elseif($size_img[2]==3) imagepng($dest_img, $smallimage,$q);
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}


/////
// makethumb - берёт картинку из одного поля шаблона,изменяет размер,сохраняет в др.поле
// makethumb(номерШаблона,номерОбъекта,идПоляОткуда,идПоляКуда,ширина,высота,качество)

function makethumb($class,$message,$picFieldID,$thumbFieldID,$thumbWidth,$thumbHeight,$thumbQuality) {
$messageTable="Message".$class;
$thumbfieldname=listQuery("SELECT Field_Name FROM Field WHERE Field_ID=$thumbFieldID","$data[Field_Name]");
$picVirtName=listQuery("SELECT Virt_Name FROM Filetable WHERE Field_ID=$picFieldID AND Message_ID='$message'","$data[Virt_Name]");
if($picVirtName!='') {

//
//
// $DOCUMENT_ROOT="D:_NetCat_www";
//
//
$subCcPath=listQuery("SELECT File_Path FROM Filetable WHERE Field_ID=$picFieldID AND Message_ID='$message'","$data[File_Path]");
$picPath=$DOCUMENT_ROOT."/netcat_files".$subCcPath;

$thumbVirtName=md5($picVirtName.date("H:i:s d.m.Y").uniqid("netcat"));
resizeimg($picPath.$picVirtName,$picPath.$thumbVirtName, $thumbWidth, $thumbHeight,$thumbQuality);

if ($thumbMIME=@getimagesize($picPath.$thumbVirtName)) {
$thumbSize=@filesize($picPath.$thumbVirtName);

listQuery("UPDATE $messageTable SET $thumbfieldname='Thumb{$ii}:{$thumbMIME['mime']}:$thumbSize' WHERE Message_ID='$message'");

$prevThumbPath=listQuery("SELECT File_Path,Virt_Name FROM Filetable WHERE Message_ID=$message AND Field_ID=$thumbFieldID","$data[File_Path]$data[Virt_Name]");
if ("" != $prevThumbPath) {
unlink( $DOCUMENT_ROOT."/netcat_files".$prevThumbPath );
listQuery("DELETE FROM Filetable WHERE Message_ID=$message AND Field_ID=$thumbFieldID");
} //if prevPath

listQuery("INSERT INTO `Filetable` (`Real_Name` , `Virt_Name` , `File_Path` , `File_Type` , `File_Size` , `Message_ID` , `Field_ID` ) VALUES ('Thumb{$picFieldID}','$thumbVirtName','$subCcPath','{$thumbMIME['mime']}','$thumbSize','$message','$thumbFieldID')");
} //if thumbMIME
else echo "Маленькая картинка не_создана.
<br>Возможные причины:
<br>- Попытка добавить не картинку;
<br>- Ошибка в базе данных;<br>";
} // if
else /* echo "!!!!!!!!!! нет картинки<br>" */;
} // maketmb

?>


После добавления:
Код:
";
// номера полей в шаблоне
$picFieldID=array(624,625,626); // Оригинальная картинка
$thumbFieldID=array(630,631,632); // Малая превьюка
$picBigFieldID=array(633,634,635); // Большая превьюшка
$class=61; //61 - num in genereal class list

for ($ii=0;$ii<3;$ii++) {

// makethumb - берёт картинку из одного поля шаблона,изменяет размер,сохраняет в др.поле
// makethumb(номерШаблона,номерОбъекта,идПоляОткуда,идПоляКуда,ширина,высота,качество)
// делай f_PicFull# -> f_PicBig#
makethumb($class,$message,$picFieldID[$ii],$picBigFieldID[$ii],460,346,85);
// делай f_PicBig# -> f_Thumb#
makethumb($class,$message,$picBigFieldID[$ii],$thumbFieldID[$ii],166,125,75);

} //for

echo "
<a href='/netcat/add.php?catalogue=$catalogue&sub=$sub&cc=$cc'>Ещё добавить</a>
<br><br>
<a href='/netcat/?catalogue=$catalogue&sub=$sub'>Продолжить редактирование раздела</a>
<br><br>

<a href='/index.php'>Выйти из режима добавления</a>
<br>


после изменения:
Код:
";
$picFieldID=array(624,625,626); // $f_PicFull#
$thumbFieldID=array(630,631,632); // $f_Thumb#
$picBigFieldID=array(633,634,635); // $f_PicBig#
$class=61; //61 - num in genereal class list

for ($ii=0;$ii<3;$ii++) {

// makethumb - берёт картинку из одного поля шаблона,изменяет размер,сохраняет в др.поле
// makethumb(номерШаблона,номерОбъекта,идПоляОткуда,идПоляКуда,ширина,высота,качество)

// делай f_PicFull# -> f_PicBig#
makethumb($class,$message,$picFieldID[$ii],$picBigFieldID[$ii],460,346,85);
// делай f_PicBig# -> f_Thumb#
makethumb($class,$message,$picBigFieldID[$ii],$thumbFieldID[$ii],166,125,75);

} //for

echo "
<a href='/netcat/add.php?catalogue=$catalogue&sub=$sub&cc=$cc'>Добавить информацию</a>
<br><br>
<a href='/netcat/?catalogue=$catalogue&sub=$sub'>Продолжить редактирование раздела</a>
<br><br>

<a href='/index.php'>Выйти из режима изменения</a>
<br>


только одно мне странно - $DOCUMENT_ROOT - у меня пустая перменная, руками её прописывал и локально и на серваке.

Всего Доброго
18.07.2007, 11:46
r

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

внутри функции объявите $DOCUMENT_ROOT как global:

function makethumb($class,$message,$picFieldID,$thumbFieldID,$thumbWidth,$thumbHeight,$thumbQuality) {

//########################//
global $DOCUMENT_ROOT;
//########################//

$messageTable="Message".$class;

Чего не понимают, тем не владеют /Гёте/
05.03.2008, 18:54
Nemo
НПЦ Владис

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

Я так понимаю все это актуально только под 2 версию?
На третей что-то ошибку дает....

разобрался... болеее функции из function.inc.php не подхватываются пришлось ее вписать прям в макет... заработало
вопрос это тока у меня или у всех? и способ решения?

Антон
01.04.2008, 15:38
MFD
Кашаев Камиль

Зарегистрирован:
2007-02-15
Сообщений: 47

Цитата:

$picFieldID=array(624,625,626); // Оригинальная картинка
$thumbFieldID=array(630,631,632); // Малая превьюка
$picBigFieldID=array(633,634,635); // Большая превьюшка


не совсем понятно...
сколько нужно полей..
три или девять?
08.04.2008, 18:10
Александр
Zavarka Team

Зарегистрирован:
2005-01-22
Сообщений: 53

Полей столько - сколько вам нужно. Тут для примера приведена схема с 9-ю полями. то есть три картинки с тремя полями.

zavarka-team.ru
198 196 2008-04-08 18:10:45 6889
Страницы: 1  |  2  |  3
Описание проекта