Комментарии 62
А где примеры работы?
Конечный результат работы функции показали бы…
А результат работы скрипта можно увидеть? Или он 100% повторяет предложенный вариант?
Да, действительно, прошу прощения, обновил пост.
Отлично! А реально сделать что бы фоновое изображение было в градиенте, а не в виде размытого изображения и с рваными краями? Как то так:
![](https://habrastorage.org/r/w780q1/storage/habraeffect/b7/09/b709a38ceb30d9436d3f46b9c6728f36.jpg)
Эх мечты мечты…
![](https://habrastorage.org/storage/habraeffect/b7/09/b709a38ceb30d9436d3f46b9c6728f36.jpg)
Эх мечты мечты…
Более чем реально, попробую сделать позже. Этот способ изначально задумывался чтобы подогнать все изображения под один размер, а с рваными краями размер получается визуально неоднозначным.
На белом смотрится отвратительно. Это же эмбилайт, он для темноты!
А может быть опционально еще фоновое изображение в градиенте до окружающего картинку фона?
разве не imagecreatefrompng должно быть?case 3: // PNG $src_image = imagecreatefromjpeg($image_from); break;
Спасибо, поправил.
в правилах хорошего тона выполнять проверку входных данных до совершения с ними операций, я бы советовал перенести этот кусок ближе к началу функции.// деление на ноль - плохая идея if ( ($src_width == 0) or ($src_height == 0) ) { return FALSE; }
За скрипт спасибо, может где пригодится. Выглядит правда необычно, особенно вторая пара локтей на третьем примере :)
попытка хорошая, но далека от ambilight
Сразу вспоминается chikuyonok.ru/2010/03/ambilight-video/, в принципе его метод можно и тут использовать.
Попробуйте imageCopyResampled — картинки сглаженные будут.
че-то как-то не очень…
попробуйте сделать это с использованием imagemagick
Вот здесь habrahabr.ru/blogs/webdev/92237/#comment_2805276 уже сделали
А почему вместо 'case 2: // JPG' не использовать стандартные константы IMAGETYPE_XXX? По-моему, будет намного читабельнее…
лучше не размытый увеличенный фон, а лучевое рассеяние точек периметра
Решил попробовать скрипт — картинка размером 400х214 (82кб) рендерилась 2 секунды с копейками. Может действительно Imagick?
Сделал ради интереса на основе Imagick, с разными эффектами для заднего фона(просто размытие, направленное размытие, эффект негативной пленки). Параметр spread создает эффект водяной поверхности.
Картинка размером 1024х768(204кб) рендерится примерно 0.25 сек.
Картинка размером 1024х768(204кб) рендерится примерно 0.25 сек.
Copy Source | Copy HTML
- function render($fromImg, $toImg, $width = 200, $height = 200, $typeBlur = "blur", $blur = 20, $spread = 0, $border = 20)
- {
- $Image = new Imagick($fromImg);
- $BackGround = $Image->getImage();
- /*уменьшаем картинку на заданную ширину и высоту*/
- $BackGround->scaleImage($width, $height);
-
- /*выбор типа фильтра для размытия*/
- switch ($typeBlur) {
- case "gaussian":
- $BackGround->gaussianBlurImage(5, $blur);
- break;
- case "motion":
- $BackGround->motionBlurImage($blur, 10, 1);
- break;
- case "negate":
- $BackGround->negateImage(false);
- $BackGround->blurImage(5, $blur);
- break;
- default:
- $BackGround->blurImage(5, $blur);
- break;
- }
-
- $widthImage = $Image->getImageWidth();
- $heightImage = $Image->getImageHeight();
-
- if ($widthImage > $heightImage) {
- $Image->scaleImage($width - $border, 0);
- $top = ($height - $Image->getImageHeight()) / 2;
- $left = $border / 2;
- } else {
- $Image->scaleImage( 0, $height - $border);
- $top = $border / 2;
- $left = ($width - $Image->getImageWidth()) / 2;
- }
-
- /*эффект водянной поверхности(если значение больше 0)*/
- if ($spread > 0) $BackGround->spreadImage($spread);
-
- /*объединяем фон и картинку*/
- $BackGround->compositeImage($Image, Imagick::COMPOSITE_OVER, $left, $top);
- /*сохраняем картинку*/
- file_put_contents($toImg, $BackGround->getImageBlob());
- }
-
- render("image.jpg", "image-mini.jpg");
посмотрел на примеры изображений, почувствовал, как будто укурился
амбилайтом, простите, тут и не пахнет…
да и вообще, вся фишка амбилайта в динамике.
на статических картинках — никак…
да и вообще, вся фишка амбилайта в динамике.
на статических картинках — никак…
отличный эффект!
Вау, нравится Ваша идея, надо попробовать реализовать на JS…
chikuyonok.ru/2010/03/ambilight-video/ черпайте вдохновение
не похоже на абмилайт
Девушка на фотках так себе…
// деление на ноль — плохая идея
я бы поставил это в самое начало кода, ибо все сейчас проделанное до этого куска не имеет значения, потому что все равно FALSE будет, если w=0 или h=0
я бы поставил это в самое начало кода, ибо все сейчас проделанное до этого куска не имеет значения, потому что все равно FALSE будет, если w=0 или h=0
Эмбилайт не может «светить» черным, он лампа :)
Большое спасибо за алгоритм и, собственно, идею. Буду переводить на perl несколько позже. =)
Казалось бы, причем здесь Амбилайт? Вы бы хотя бы перед тем как продукт плейсмент устраивать, для начала изучили что есть Амбилайт и как он работает. Там суть в крайних пикселях, а не как тут — картинку увеличили, разблюрили и типа всё, Амбилайт.
Против скрипта ничего не имею, хоть он и бестолковый. Плохо, что зачем-то ни к селу ни к городу начали амбилайт вспоминать.
Против скрипта ничего не имею, хоть он и бестолковый. Плохо, что зачем-то ни к селу ни к городу начали амбилайт вспоминать.
Спасибо! Прикольный эффект. Буду юзать. :)
Столько работы, ради эффекта усугубляющего вид картинки…
На белом это не смотрится, это же эмбилайт, он для темноты.
Афтар молодец. Интересный код.Авось пригодится.
в идеале должно быть написано на джаваскрипте, использовать только крайние пиксели и работать на черном фоне) если не будет тормозить — будет конфетка.
мне кажется такое лучше делать с помощью js.
Дайте код полной странички, ибо у меня что то не выходит в $image_from даю имя картинки в $image_to даю имя выходной картинки, ошибок не дает, картинку не сохраняет, ЧЯДНТ?
dumpz.org/19143/ — сорцы
dumpz.org/19143/ — сорцы
Что функция возвращает, true или false? На сервере установлена GD для PHP? Сейчас с телефона пишу, если не разберётесь, то позже пришлю.
Слегка ступил по утру =)
Выдает ошибку на: $result = imagefilter($dest_image, IMG_FILTER_SMOOTH, 6);
Fatal error: Call to undefined function imagefilter() in /var/www/***/1.php on line 59
Note: This function is only available if PHP is compiled with the bundled version of the GD library.
выход ставить bundled version или mgccl.com/2007/03/02/imagefilter-function-for-php-user-without-bundled-gd
Выдает ошибку на: $result = imagefilter($dest_image, IMG_FILTER_SMOOTH, 6);
Fatal error: Call to undefined function imagefilter() in /var/www/***/1.php on line 59
Note: This function is only available if PHP is compiled with the bundled version of the GD library.
выход ставить bundled version или mgccl.com/2007/03/02/imagefilter-function-for-php-user-without-bundled-gd
Картинки с результатами работы не доступны, помёрли.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Реализация эффекта Philips Ambilight в превью изображений