Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2016, 20:23   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Как не терять качество jpeg файла в примере

Здесь загружаются 3 jpeg изображения, создается пустое изображение размером как склеиных по горизонтали этих 3х вывод их и сохранение в файле.

1)Все бы ничего только качество результирующего изображения хуже исходных, как использовать полное качество?
2) у меня предполагается, что будут объединяться от 3х до 90 таких изображений. Каким способом можно сделать это с наименьшими потерями производительности?
Сами файлы расположены в RAM на сервере.
Всего таких файлов на сервере лежит 750-900.
3)Если это ускорит работу можно объединить все эти 750+ файлов в один и уже работать с ним, но чувствую что это плохая идея, хотя не знаю что быстрее будет загружать 3-90 маленьких файлов или сразу один большой файл как сумма всех 750+?
4) можно ли както по другому обединить сразу все изображение а не поочередно в цикле склеивать предудущее итоговое с новым и так далее?
Код:
<?php
header("Content-Type: image/png");
$xmin=65;// ширина изображений
$ymin=45;// высота изображений
$n=3;
$mas_b_cod[0]='mAT_001.jpg'; 
$mas_b_cod[1]='mAT_002.jpg'; 
$mas_b_cod[2]='mAT_003.jpg'; 

// обложка
$src_0 = imagecreatefromjpeg($mas_b_cod[0]);
$src_1 = imagecreatefromjpeg($mas_b_cod[1]);
$src_2 = imagecreatefromjpeg($mas_b_cod[2]);
$im = @imagecreate($xmin*$n,$ymin)
    or die("Невозможно создать поток изображения");
//$background_color = imagecolorallocate($im, 0, 0, 0);
//$text_color = imagecolorallocate($im, 233, 14, 91);
//imagestring($im, 1, 5, 5,  "Простая Текстовая Строка", $text_color);
//imagepng($im);

    // настройка прозрачности и фильтров
    imagealphablending($im, false);
    imagesavealpha($im, false);

// объединение изображений
    imagecopymerge($im, $src_0, 0, 0, 0, 0, $xmin, $ymin, 100);
	imagecopymerge($im, $src_1, $xmin, 0, 0, 0, $xmin, $ymin, 100);
	imagecopymerge($im, $src_2, $xmin*2, 0, 0, 0, $xmin, $ymin, 100);

imagejpeg($im);
imagejpeg($im, 'minicards_all.jpg');
imagedestroy($im);
 imagedestroy($src_0);
  imagedestroy($src_1);
   imagedestroy($src_2);

Последний раз редактировалось Illusiony; 22.03.2016 в 20:30.
Illusiony вне форума Ответить с цитированием
Старый 22.03.2016, 20:30   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

использовать imagick вместо GD
ADSoft вне форума Ответить с цитированием
Старый 22.03.2016, 20:54   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

А в данном варианте никак?
Или Вы имеете ввиду по производительности лучше его использовать?
imagick еще нужно устанавливать, он в стандартной установке не идет

Что то типо этого?
Код:
montage -background transparent -tile 10x1 -geometry 100x200 money01.png money02.png money03.png money04.png money05.png money06.png money07.png money08.png money09.png money10.png money.png
тока это что то, как из командной строки, а не из php(

Последний раз редактировалось Illusiony; 22.03.2016 в 21:08.
Illusiony вне форума Ответить с цитированием
Старый 22.03.2016, 21:23   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

В imagejpeg можно попробовать качество явно указать – там по умолчанию 75%.
Andkorol вне форума Ответить с цитированием
Старый 22.03.2016, 22:29   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
В imagejpeg можно попробовать качество явно указать – там по умолчанию 75%.
Cспасибо, сделал.

Но, почему то результирующее изображение получается менее ярким чем оригиналы(
А нет встроенных функций php чтобы сразу несколько изображений соединить а не так только исходное с одним? В цикле так делать непроизводительно(
Illusiony вне форума Ответить с цитированием
Старый 22.03.2016, 22:54   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
А нет встроенных функций php чтобы сразу несколько изображений соединить а не так только исходное с одним? В цикле так делать непроизводительно(
Даже если бы такая функция и была бы – сам как думаешь, по какому бы принципу она работала?
Работа с графикой – это вообще дело непроизводительное, не только в PHP.
А уж выделывать всякие фортели с кучей картинок – так и подавно.
Теоретически, с изображениями более производительно работает Imagick – сравнительно с GD, само собой.
Но тут всё нужно пробовать, тестировать, замерять и сравнивать – только так определяется оптимальность использования, слишком много факторов влияния в этом вопросе.
Andkorol вне форума Ответить с цитированием
Старый 22.03.2016, 23:18   #7
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Даже если бы такая функция и была бы – сам как думаешь, по какому бы принципу она работала?
Работа с графикой – это вообще дело непроизводительное, не только в PHP.
А уж выделывать всякие фортели с кучей картинок – так и подавно.
Теоретически, с изображениями более производительно работает Imagick – сравнительно с GD, само собой.
Но тут всё нужно пробовать, тестировать, замерять и сравнивать – только так определяется оптимальность использования, слишком много факторов влияния в этом вопросе.
Большое спасибо.
Насчет яркости в моем результирующем изображении, по видимому где то я не так делаю, возможно при создании
Код:
$im = @imagecreate($xmin*$n,$ymin)
нужно задавать что то еще. или здесь
Код:
 // настройка прозрачности и фильтров
    imagealphablending($im, false);
    imagesavealpha($im, false);
Где то упущение.

Последний раз редактировалось Illusiony; 22.03.2016 в 23:24.
Illusiony вне форума Ответить с цитированием
Старый 22.03.2016, 23:35   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
или здесь
Код:
 // настройка прозрачности и фильтров
    imagealphablending($im, false);
    imagesavealpha($im, false);
Где то упущение.
Попробуй TRUE в различных вариациях, или вообще это убрать – «методом тыка», в общем
Andkorol вне форума Ответить с цитированием
Старый 23.03.2016, 00:45   #9
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Нашел проблему. Вместо
Код:
$im = @imagecreate($xmin*$n,$ymin)
Поменял на :
Код:
$im=imagecreatetruecolor($xmin*$n,$ymin)
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как картинку из файла jpeg поместить в конкретную ячейку excel? cawendish Microsoft Office Excel 1 05.02.2015 00:25
Timage как не терять качество при изменении размеров? Человек_Борща Компоненты Delphi 7 02.06.2014 23:43
Программа, корректировки файла записей, на примере файла по группе студентов. S.T.A.L.K.E.R.20 Помощь студентам 14 10.05.2011 18:02
Как построить Bitmap для jpeg файла ??? Kocapb Общие вопросы C/C++ 4 14.12.2007 19:50