Сортировка картинок по их размеру

defence

Деклассированный элемент
Сортировка картинок по их размеру

Привет всем! Такой вопросик, значит: имеется таблица в MySQL, содержащая товары. Имена картинок в виде 234234234.jpg лежат в этой же таблице. Сами же картинки лежат в папке pics. Возможно ли с помощью php сделать сортировку вывода картинок ПО ИХ РАЗМЕРУ? Например, сначала выводятся картинки у которых ширина, скажем, 50px, а потом выводятся картинки - 80px.

Народ, если такое возможно, подскажите как это реализовать?

Знаю, есть getimagesize, но как ею пользоваться, не понял.
Мануал читал.

Заранее спасибо!
 

jrip

Новичок
http://ru.php.net/getimagesize
там же есть простенький пример, чего непонятного?

А в таблице, имхо, вместе с именем картинки, ещё держать и её размер, тогда сортировать можно запросом.
 

untied

Сдвинутый новичок
Для того, чтобы MySQL мог отсортировать картинки по размеру, помимо имени файла в БД должны храниться и размеры картинок.
Можно отсортировать и вручную (без MySQL), с помощью получения имен файлов всех картинок, определения размеров каждой картинки по очереди, и последующей сортировки массивов (вероятно, двумерных).
 

jrip

Новичок
untied
ээээ.... один вопрос. а нафига?

-~{}~ 17.02.05 12:54:

да... и ещё... а если картинок будет миллион?
 

jonjonson

Guest
defence, а по какому размеру сортировать?... Размеру файла картинки? Размеру ее ширины? Размеру ее высоты? Размеру ее площади (количеству пикселов составляющих картинку)? Размеру ее диагонали? Размеру палитры?
 

defence

Деклассированный элемент
Спасибо, братцы!

2 jrip: Начальство хочет, чтобы выводились сначала картинки одного размера, а потом другого...
 

jrip

Новичок
defence
мой вопрос про "нафига" не к тебе был, а к этому чудику - untied. :)

jonjonson
там же выше у него написано, что например по ширине. да и какая разница-то? главное принцип, в базе хранить только одну цифру, а какую: ширина, высота или ширина*высота... это по идее очень легко меняется.
 

defence

Деклассированный элемент
Посмотрел в мануале... Народ, может я совсем тупой, не глумитесь, плз... Вот пример: Идет выборка товаров из базы

PHP:
$ql = mysql_query("select * from $t_links where cid=$sub order by id");
while($rl = mysql_fetch_array($ql)) {
echo "$rl['pic'];
}
Я сильно упростил, но суть ясна... Так вот, куда деть этот getimagesize?

Помогите разобраться, пожалуйста...

-~{}~ 17.02.05 13:15:

Сорри, там в echo я зачем-то кавычки поставил...

PHP:
echo $rl['pic'];
 

rotoZOOM

ACM maniac
getimagesize никуда девать не надо, его надо поюзать когда будешь добавлять картинки в базу, с помощью него ты сможешь узнать высоту, ширину и mime тип картинки.
Заведи в таблице дополнительные поля, например img_width, img_height и туда заноси размеры, полученные от getimagesize.
А при выборке сортируй c помощью ORDER по тому полю, которому хочешь.
 

defence

Деклассированный элемент
Спасибо огромное!

-~{}~ 17.02.05 14:34:

rotoZOOM
А можно getimagesize как нибудь использовать не при добавлении картинок в базу, а при выводе в браузер?

У меня там уже более 3000 картинок, это все перезакачивать придется???
 

rotoZOOM

ACM maniac
конечно можно. Можно взять оттуда ширину и высоту и подставить все это в тэг img, а можно взять уже отформатированную строку по этой же функции.
Но как я понял у тебя условие не только вывести, но ишо и отсортировать по "размеру" ?
Если в базе не будет размера картинок, то файлы просматривать в любом случае придется все. Ладно если это один раз, а это ведь при каждом запросе к страничке. Кошмар !
Лучше добавь поля, потом напиши небольшой скриптик, который автоматом пробежится по всем картинкам и занесет все в базу.
 

jrip

Новичок
defence
я тебе ответил на сообщение. добавлю ток, что если картинки уже есть в базе - не проблема, просто пишешь небольшой скриптик, который будет брать каждую картинку и прописывать в базе её размер. Кстати не думал что 3000, если столько то вариант - "а при выводе в браузер" воообще не катит.
 

untied

Сдвинутый новичок
Originally posted by jrip
мой вопрос про "нафига" не к тебе был, а к этому чудику - untied. :)
Чудик untied рад ответить непосвященным!
Если в структуре БД размеры картинок не указаны, а саму структуру БД менять уже нельзя (по каким-либо причинам), то иного метода сортировать картинки по геометрическим размерам нет.
И вообще это не моя задача! Поэтому про "нафига" спроси у автора. Да он, впрочем, и ответил уже.
 

jrip

Новичок
untied
Нет "нафига" я спрашивал именно тебя. Слов о том, что менять структуру БД указано не было. И даже если вдруг менять нельзя - можно в конце концов хранить пары айди картинки-размер в отдельном файле, но уж никак не пропускать через
getimagesize 3000 файлов при каждой загрузке страницы.

з.ы. Долго думал над оправданием своего бреда? я даж представить не могу ситуацию, когда нужно хоть как-то серьёзно изменить скрипт, а добавить поле в таблицу злобно запрещают.
 

defence

Деклассированный элемент
Добавил поле width... Попытался сделать следующее (привожу упрощенно):
PHP:
$pic="pics".$row['pic'];  // выбрано из базы
$size=getimagesize($pic);
echo '<tr><td>'.$size[0].'</td></tr>'; // в мануале вроде это ширина
Таблица пустая... Не работает... Может я что-то не так написал?

-~{}~ 17.02.05 16:58:

Сорри... слэш забыл...
PHP:
$pic="pics/".$row['pic'];  // выбрано из базы
 

rotoZOOM

ACM maniac
$pic - должен быть у тебя путь к файлу картинки.
Выведи $pic и посмотри на самом деле чему оно равно
 

defence

Деклассированный элемент
Ну да.
PHP:
$pic="pics/".$row['pic']; // папка pics, $row['pic'] - имя картинки
Вроде все правильно...
 
Сверху