Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: размер картинки.  (Прочитано 10166 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Chuda
Гость
« : 24-07-2006 15:25 » 

дело такое.
картинка (файл jpeg или png) записана в MySQL(blob).
нужно уменьшить её в размерах и вывести в браузер.
imagecopyresized или imagecopyresampled теряют часть данных о цвете.
как быть?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 24-07-2006 15:27 » 

При уменьшении картинки потеря части информации неизбежна.

Что тебе конкретно нужно? В чем загвоздка?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #2 : 24-07-2006 15:59 » 

нужно уменьшить картинку.
во-первых, я в упор не понимаю, в каком виде должна быть картинка, чтобы её можно было скармливать таким функциям как например imagecopyresized. Изначально картинка в бинарном виде, в поле MySQL типа blob.
во-вторых, раньше мне удавалось изменить размер примерно таким образом:
      $ir = imagecreatefrompng($url);
      $im = @imagecreate($nw,$nh);
      imagecopyresized ($im, $ir, 0, 0, 0, 0, $nw, $nh, $imgprop[0], $imgprop[1]);
но при этом терялась часть цвета.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 24-07-2006 18:58 » 

Chuda, запиши данные, полученные из базы, во временный файл и открой его.

P.S.: еще один камень в огород любителей хранить бинарники в базе. Ага
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #4 : 24-07-2006 20:00 » 

всё замечательно, я запишу и открою.
а ещё я малость побалуюсь с этими блобами, и вернусь к нормальным файлам.
пока что преимуществ не вижу.
но дальше-то что?
как бороться с обесцвечиванием картинок при изменении размеров?
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 24-07-2006 23:50 » 

Я использую ниже приведенный код для уменьшения картинки до определенных границ
с сохранением пропорций. С png не баловался, но jpg изменяется без проблем.
Код:
 header ("Content-type: image/jpeg");
 $imgname="file.jpg"; //имя файла
 $src = @imagecreatefromjpeg ($imgname); /* попытка открыть */
 if(!$src) die ("Not open img ".$imgname);
 $sw=imagesx($src);
 $sh=imagesy($src);
 //задаем размер прямоугольника в который вписывается исходное изображение
 $iw=400; $ih=200;
 if(isset($_GET['h'])) $ih=$_GET['h'];
 if(isset($_GET['w'])) $iw=$_GET['w'];
 $dw=$iw/$sw;
 $dh=$ih/$sh;
 if(($sh*$dw) > $ih) { $nh=$ih; $nw=$dh*$sw; }
 else { $nh=$dw*$sh; $nw=$iw; }
 $dist = imagecreatetruecolor($nw,$nh); // создать пустое изображение
 imagecopyresampled($dist,$src,0,0,0,0,$nw,$nh,$sw,$sh);
 imagedestroy($src);
 imagejpeg($dist,null,60);
 imagedestroy($dist);
Вот демонстрация: http://www.cultangar.info/getaimg.php?id=327&h=200&w=400 - размер задается параметрами h=200&w=400
Реальный файл (размер 470х650): http://www.cultangar.info/img/paintings/asya_alisa0002.jpg
« Последнее редактирование: 06-12-2007 19:17 от Алексей1153++ » Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
Chuda
Гость
« Ответ #6 : 25-07-2006 08:24 » new

Большое спасибо, RomCom.
Мой код был практически идентичен за исключением одной детали.
у меня было не ImageCreateTrueColor, а ImageCreate.
теперь и у меня работает правильно.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines