Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработка графики средствами php
 
 автор: sata   (19.04.2005 в 21:55)   письмо автору
 
 

Суть такая есть картинка у которой внизу надпись возможно ли как то эту надпись убрать укоротить как то картинку что ли обрезать и тд. ? И если возможно скажите как. Спасибо

   
 
 автор: Dimrix   (19.04.2005 в 22:22)   письмо автору
 
   для: sata   (19.04.2005 в 21:55)
 

А не проще фотошопом (или даже паинтом) обрезать или залить безветной линией и сохранить под другим именем? А потом чередовать вывод: если нужна картина с надписью, то отображаешь её, если нет, то переделанную

if ($nadpis = "da")
  {
    ?>
    <img src = "./img/img_with_nadpis.jpg>
    <?php
  
}
else
  {
    
?>
    <img src = "./img/img_with_out_nadpis.jpg>
    <?php
  
}

   
 
 автор: $OMEGA   (20.04.2005 в 00:11)   письмо автору
 
   для: Dimrix   (19.04.2005 в 22:22)
 

Ну это совсем мудрено!!! Проще изменить размер изображения средствами HTML img size, ну аесли совсем нужно извратиться и поменять изображение под себя, читай тут: http://abc.tsi.lv/cgi/index.cgi?id=728

   
 
 автор: Dimrix   (20.04.2005 в 09:10)   письмо автору
 
   для: $OMEGA   (20.04.2005 в 00:11)
 

Не размер человеку изменить нужно, а убрать надпись в части избражения(если я правильно понял). Т.е. если сжимать изображение - она всёравно будет видна.
P.S. да и зачем лишний раз комп грузить. Может я переучился в своё время, но привык сравнивать операции и ставить в работу самую мелкоёмную для процессора и памяти. Ведь как не курути, обрезка методами ПХП будет больше занимать процессорного времени, чем проверка 1 условия(вывод изображения будет в обоих случаях, поэтому не рассматриваю его). В случае накладывания рисунка цветом фона страницы (заплатка на надпись), будет кушаться чуть больше памяти раз и сайт чуть больше весить будет 2. Ну а тут нагрузка не на проц или память, а на разработчика :-) . Я не говорю что моё предложение наилучшее, наверняка есть ещё далеко не один вариант решения задачи, просто из пока что предложенных, данный вариант будет меньше грузить проц и не будет толстеть от лишних обьектов, а значит при тех же условиях вашем сайтом могут пользоваться на х-человек больше...

   
 
 автор: glsv (Дизайнер)   (20.04.2005 в 12:41)   письмо автору
 
   для: Dimrix   (20.04.2005 в 09:10)
 

>Ведь как не курути, обрезка методами ПХП будет больше занимать процессорного времени
>Ну а тут нагрузка не на проц или память, а на разработчика :-) .
В настоящее время, процессорное время несравнимо дешевле, чем трудозатраты разработчика. А уж тем более квалифицированного разработчика. Естественно, применительно к PHP и сайтостроению воообще.
Если взять ваш метод за базовый критерий, то нужно немедленно прекратить использовать PHP и прочие серверные технологии, а все страницы верстать вручную на HTML. Сервер, действительно, будет "летать".

   
 
 автор: Dimrix   (20.04.2005 в 17:25)   письмо автору
 
   для: glsv (Дизайнер)   (20.04.2005 в 12:41)
 

От ПХП глупо отказываться, но писать с наименьшими потерями для проца памяти и не загружать лишний раз передачей ненужной информации канал я думаю стоит.
>В настоящее время, процессорное время несравнимо дешевле,
>чем трудозатраты разработчика.
Я думаю обрезка картинки займет не более 2 минут (с загрузкой выгрузкой фотопопа), а вот накладывать "заплатку" или расчёт сжатия займёт не на много меньше. А по поводу процессорного времени... если для себя как аматор пишешь, то согласен полностью, но если пытаешься писать по подобию профессионалов, тогда вспоминаешь правило "ничего лишнего". Ведь одно дело 100 пользователей на сайте, а другое несколько тысяч. Тогда это время процессора равное лишней 1мс превращаются в секунды...

   
 
 автор: glsv (Дизайнер)   (20.04.2005 в 21:49)   письмо автору
 
   для: Dimrix   (20.04.2005 в 17:25)
 

>Я думаю обрезка картинки займет не более 2 минут (с загрузкой выгрузкой
фотопопа)
Можно привести контраргументы :)
А если изображений несколько тысяч штук?
Или они постоянно добавляются и добавляются людьми, которые не имею навыков работы с графическими программами.

В итоге мы сойдемся на том, что при выборе решения всегда нужно исходить из поставленной задачи.
Безусловно, скорость выполнения и оптимизация кода важны, но задачи где это выходит на первый план встречаются не так часто (в PHP).
В большинстве коммерческих разработок сайтов во главу угла ставится скорость разработки, а не скорость выполнения кода. И это правильно, так как очень и очень небольшое число сайтов являются посещаемыми и создают ощутимую нагрузку на сервер. При разработке приложений, работа которых предполагает большую нагрузку, приоритеты, естественно, изменяются.

   
 
 автор: $OMEGA   (22.04.2005 в 10:12)   письмо автору
 
   для: Dimrix   (20.04.2005 в 09:10)
 

Предложеная статья - это основа и при недолгих размышлениях ясно - как не только изменить размер, но и обрезать графику, если ето делать при закачке файла на сервер - процессорное время тратится один раз и при просмотре не используется + затраты на создание - ЕДИНОВРЕМЕННЫЕ! А в последствии все автоматизировано. Ну и конечно приятнее серым веществом щевелить, чем выполнять однообразные манипуляции с адобовскими продуктами.

   
 
 автор: glsv (Дизайнер)   (20.04.2005 в 04:48)   письмо автору
 
   для: sata   (19.04.2005 в 21:55)
 

Это несложно сделать если
1. На сервере установлена библиотека GD для работы с графикой
2. Вы точно знаете координаты это надписи. Т.е., например, точно известно, что она лежит на растоянии 100 пикселей от нижнего края изображения.
Эти условия выполняются?

   
 
 автор: sata   (20.04.2005 в 10:59)   письмо автору
 
   для: glsv (Дизайнер)   (20.04.2005 в 04:48)
 

Дело в том что картинки будут подгружаться динамически и вручную следственно невозможно исправить да и исчезать они будут буквально через несколько дней.

   
 
 автор: glsv (Дизайнер)   (20.04.2005 в 12:35)   письмо автору
 
   для: sata   (20.04.2005 в 10:59)
 

Хм… но не важно как будут подгружаться картинки и как долго они будут лежать на сервере. Для того, чтобы средствами PHP можно было изменить изображение, нужно определиться с алгоритмом (что вырезаем, откуда и как) и запрограммировать его.
PHP же нельзя сказать: вырежи, мешающую мне надпись. Но можно сказать обрежь изображение снизу на, например, 150 пикселей.

   
 
 автор: sata   (21.04.2005 в 09:36)   письмо автору
 
   для: glsv (Дизайнер)   (20.04.2005 в 12:35)
 

Дык мне это и надо тока я незнаю как :)

   
 
 автор: glsv (Дизайнер)   (21.04.2005 в 09:57)   письмо автору
 
   для: sata   (21.04.2005 в 09:36)
 

Для начала, хотя бы ответье на мои вопросы.

   
 
 автор: sata   (21.04.2005 в 18:10)   письмо автору
 
   для: glsv (Дизайнер)   (21.04.2005 в 09:57)
 

1. да установлено
2. да точно знаю что на сколько убрать

   
 
 автор: glsv (Дизайнер)   (22.04.2005 в 04:40)   письмо автору
 
   для: sata   (21.04.2005 в 18:10)
 

Можно по разному преобразовывать изображения.
1. Можно обрезать во время добавления
2. Можно преобразовывать изображения "на лету", не сохраняя изменения в файлах.

Приведу код для второго варианта. Первый файл img.php содержит код, обрезающий изображения.
img.php

<?
  $filename 
$_GET["file"];
  
// Известно, что исходное изображение нужно обрезать
  // на 150 пикселей. Заносим это значение в переменную
  
$clip 150;
  if (
$filename=="") exit();
  
// Создаем исходное изображение
  
$image imagecreatefromjpeg($filename);
  if (
$image=="") exit;
  
// Определяем размеры исходного изображения
  
$size getimagesize($filename);
  
  
// Вычисляем размеры нужного изображения,
  // которые равны размеру исходного изображения - 150 пикселей снизу
  
$img_dst imagecreate($size[0], $size[1]-$clip);
  
// Копируем само изоббражение
  
imagecopy($img_dst$image0000$size[0], $size[1]);
  
  
// Выводим изображение в браузер
  
header("Content-type: image/jpeg");
  
imagejpeg($img_dst);
  
  
// Удаляем изображения из памяти
  
imagedestroy($image);
  
imagedestroy($img_dst);
?>

Этот файл нужно подставлять в параметр src тега <img>
на страницу, где используются изображения

<img src="img.php?file=img.jpg" border="0"  alt="">

Имя файла, который необходимо преобразовать, передается в параметре ?file=img.jpg. И на странице отображается уже измененая картинка.

   
 
 автор: sata   (22.04.2005 в 09:54)   письмо автору
 
   для: glsv (Дизайнер)   (22.04.2005 в 04:40)
 

Спасибо

   
 
 автор: sata   (23.04.2005 в 14:14)   письмо автору
 
   для: sata   (22.04.2005 в 09:54)
 

А ещё вопросик один а как осуществить динамическое уменьшение изображения типа при аплоэде на сервер оно автоматически уменьшалось до определённых параметров. Спасибо

   
 
 автор: glsv (Дизайнер)   (23.04.2005 в 15:06)   письмо автору
 
   для: sata   (23.04.2005 в 14:14)
 

В теме по ссылке описывается функция уменьшения изображений.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145
А по этой ссылке находится статья по работе с графикой средствами PHP.
http://www.softtime.ru/info/articlephp.php?id_article=38

   
 
 автор: sata   (17.06.2005 в 15:49)   письмо автору
 
   для: glsv (Дизайнер)   (23.04.2005 в 15:06)
 

Непонятно а каким макаром зделать так чтобы на выходе картинка получалась цветная, а то на данный момент она чёрно-белая

   
 
 автор: cernos   (17.06.2005 в 18:05)   письмо автору
 
   для: sata   (17.06.2005 в 15:49)
 

Вот код уменьшения изображения
файл назвать preview.php

<?
$file_name
=$_GET['image'];
$y=80;#px  //будущий размер изображения в пикселях по высоте
$simg getimagesize($file_name);

$h $y;
$w $h*$simg[0]/$simg[1];
    
// определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// создадим пустое изображение по заданным размерам
    
$dest_img imagecreatetruecolor($w$h);
    
// зальём его белым цветом
    
imagefill($dest_img000xFFFFFF);
    
// получим размеры исходного изображения
    
$size_img getimagesize($file_name);
    
// получим коэффициент сжатия исходного изображения
    
$src_ratio=$size_img[0]/$size_img[1];

    
// здесь вычисляем размеры, чтобы при масштабировании сохранились
    // 1. Пропорции исходного изображения
    // 2. Исходное изображение полностью помещалось на маленькой копии
    // (не обрезалось)
    
if ($src_ratio>$ratio)
    {
        
$old_h=$size_img[1];
        
$size_img[1]=floor($size_img[0]/$ratio);
        
$old_h=floor($old_h*$h/$size_img[1]);
    }
    else
    {
        
$old_w=$size_img[0];
        
$size_img[0]=floor($size_img[1]*$ratio);
        
$old_w=floor($old_w*$w/$size_img[0]);
    }

    
// исходя из того какой тип имеет изображение
    // выбираем функцию создания
$path_partspathinfo($file_name);

$ext $path_parts["extension"];
switch (
$ext)
{
   case 
"jpg":
   
$src_img imagecreatefromjpeg($file_name);
   break;

   case 
"gif":
   
$src_img imagecreatefromgif($file_name);
   break;

    case 
"png":
   
$src_img imagecreatefrompng($file_name);
   break;

   default:
     break;
   exit();
};
    
// масштабируем изображение    функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $w - ширина уменьшенной копии
    // $h - высота уменьшенной копии
    // $size_img[0] - ширина исходного изображения
    // $size_img[1] - высота исходного изображения
    
imagecopyresampled($dest_img$src_img0000$w$h$size_img[0], $size_img[1]);

    
// в зависимости от типа файла выбирвем функцию сохранения в файл
    
switch($ext)
{
 case 
"jpg":
         
header("Content-type: ".image_type_to_mime_type(IMAGETYPE_JPEG));
 
imagejpeg($dest_img);
 break;

 case 
"gif":
  
header("Content-type: ".image_type_to_mime_type(IMAGETYPE_JPEG));
 
imagejpeg($dest_img);
 break;

  case 
"png":
   
header("Content-type: ".image_type_to_mime_type(IMAGETYPE_PNG));
 
imagepng($dest_img);
 break;
 default:
  exit();
 break;
         }


    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);






?>
подключать изображение <img src='preview.php?image=address_image'>

   
 
 автор: sata   (18.06.2005 в 14:10)   письмо автору
 
   для: cernos   (17.06.2005 в 18:05)
 

Спасибо конечно но с уменьшением я уже давно разобрался суть в скрипте по обрезанию изображения. Скрипт выдаёт чёрнобелое изображение почему я впринципе понимаю нужно добавить в скрипт строки определения цвета если я прав, тока что то неполучается.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования