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

Работа с картинками и 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
Описание проекта