Pull to refresh

Comments 62

Конечный результат работы функции показали бы…
А результат работы скрипта можно увидеть? Или он 100% повторяет предложенный вариант?
Да, действительно, прошу прощения, обновил пост.
Отлично! А реально сделать что бы фоновое изображение было в градиенте, а не в виде размытого изображения и с рваными краями? Как то так:

Эх мечты мечты…
Более чем реально, попробую сделать позже. Этот способ изначально задумывался чтобы подогнать все изображения под один размер, а с рваными краями размер получается визуально неоднозначным.
На белом смотрится отвратительно. Это же эмбилайт, он для темноты!
Так это же интернет. Здесь основной фон белый! К примеру добавить мини зум при наведении мыши и будет небольшой эффект движения. Да и я не дизайнер, я просто предложил.
А может быть опционально еще фоновое изображение в градиенте до окружающего картинку фона?
case 3: // PNG
        $src_image = imagecreatefromjpeg($image_from);
        break;
разве не imagecreatefrompng должно быть?
// деление на ноль - плохая идея
    if ( ($src_width ==  0) or ($src_height ==  0) ) {
        return FALSE;
    } 
в правилах хорошего тона выполнять проверку входных данных до совершения с ними операций, я бы советовал перенести этот кусок ближе к началу функции.
За скрипт спасибо, может где пригодится. Выглядит правда необычно, особенно вторая пара локтей на третьем примере :)
попытка хорошая, но далека от ambilight
Попробуйте imageCopyResampled — картинки сглаженные будут.
Действительно лучше, обновил пост.
по центру фото нечего так вышло. а вот у девушки слева грудь задвоилась, а у той что справа локти… надо иначе алгоритм прорабатывать.
Да я вот сделал, а теперь уже и сам думаю, что переработаю немного иначе алгоритм. Вы правы, две — это самое лучшее количество грудей. =)
Это у вас дома кошки нет :)
По-моему, вы как-то неправильно используете своих кошек.
Ну у них сисек больше, и они тоже любимые )
А почему вместо 'case 2: // JPG' не использовать стандартные константы IMAGETYPE_XXX? По-моему, будет намного читабельнее…
Я не знал о существовании этих констант, спасибо, обновил еще разок.
лучше не размытый увеличенный фон, а лучевое рассеяние точек периметра
Только лучше брать не точки периметра (будут страшные чёткие лучи), а среднее арифметическое, скажем, 50 крайних точек + заблюрить.
Сделал еще один вариант вашим способом.
Решил попробовать скрипт — картинка размером 400х214 (82кб) рендерилась 2 секунды с копейками. Может действительно Imagick?
Сделал ради интереса на основе Imagick, с разными эффектами для заднего фона(просто размытие, направленное размытие, эффект негативной пленки). Параметр spread создает эффект водяной поверхности.
Картинка размером 1024х768(204кб) рендерится примерно 0.25 сек.

Copy Source | Copy HTML
  1. function render($fromImg, $toImg, $width = 200, $height = 200, $typeBlur = "blur", $blur = 20, $spread =  0, $border = 20)
  2. {
  3.     $Image = new Imagick($fromImg);
  4.     $BackGround = $Image->getImage();
  5.     /*уменьшаем картинку на заданную ширину и высоту*/
  6.     $BackGround->scaleImage($width, $height);
  7.  
  8.     /*выбор типа фильтра для размытия*/
  9.     switch ($typeBlur) {
  10.         case "gaussian":
  11.             $BackGround->gaussianBlurImage(5, $blur);
  12.             break;
  13.         case "motion":
  14.             $BackGround->motionBlurImage($blur, 10, 1);
  15.             break;
  16.         case "negate":
  17.             $BackGround->negateImage(false);
  18.             $BackGround->blurImage(5, $blur);
  19.             break;
  20.         default:
  21.             $BackGround->blurImage(5, $blur);
  22.             break;
  23.     }
  24.  
  25.     $widthImage = $Image->getImageWidth();
  26.     $heightImage = $Image->getImageHeight();
  27.  
  28.     if ($widthImage > $heightImage) {
  29.         $Image->scaleImage($width - $border,  0);
  30.         $top = ($height - $Image->getImageHeight()) / 2;
  31.         $left = $border / 2;
  32.     } else {
  33.         $Image->scaleImage( 0, $height - $border);
  34.         $top = $border / 2;
  35.         $left = ($width - $Image->getImageWidth()) / 2;
  36.     }
  37.  
  38.     /*эффект водянной поверхности(если значение больше 0)*/
  39.     if ($spread >  0) $BackGround->spreadImage($spread);
  40.  
  41.     /*объединяем фон и картинку*/
  42.     $BackGround->compositeImage($Image, Imagick::COMPOSITE_OVER, $left, $top);
  43.     /*сохраняем картинку*/
  44.     file_put_contents($toImg, $BackGround->getImageBlob());
  45. }
  46.  
  47. render("image.jpg", "image-mini.jpg");
посмотрел на примеры изображений, почувствовал, как будто укурился
амбилайтом, простите, тут и не пахнет…
да и вообще, вся фишка амбилайта в динамике.
на статических картинках — никак…
никто и не пытается сделать из браузера 40-дюймовый телевизор
UFO just landed and posted this here
Вау, нравится Ваша идея, надо попробовать реализовать на JS…
Девушка на фотках так себе…
UFO just landed and posted this here
Ну, не симпатичная нисколечко, что-ж поделаешь…
// деление на ноль — плохая идея
я бы поставил это в самое начало кода, ибо все сейчас проделанное до этого куска не имеет значения, потому что все равно FALSE будет, если w=0 или h=0
Эмбилайт не может «светить» черным, он лампа :)
Большое спасибо за алгоритм и, собственно, идею. Буду переводить на perl несколько позже. =)
Казалось бы, причем здесь Амбилайт? Вы бы хотя бы перед тем как продукт плейсмент устраивать, для начала изучили что есть Амбилайт и как он работает. Там суть в крайних пикселях, а не как тут — картинку увеличили, разблюрили и типа всё, Амбилайт.

Против скрипта ничего не имею, хоть он и бестолковый. Плохо, что зачем-то ни к селу ни к городу начали амбилайт вспоминать.
Спасибо! Прикольный эффект. Буду юзать. :)
Столько работы, ради эффекта усугубляющего вид картинки…
На белом это не смотрится, это же эмбилайт, он для темноты.
Афтар молодец. Интересный код.Авось пригодится.
в идеале должно быть написано на джаваскрипте, использовать только крайние пиксели и работать на черном фоне) если не будет тормозить — будет конфетка.
мне кажется такое лучше делать с помощью js.
UFO just landed and posted this here
UFO just landed and posted this here
Дайте код полной странички, ибо у меня что то не выходит в $image_from даю имя картинки в $image_to даю имя выходной картинки, ошибок не дает, картинку не сохраняет, ЧЯДНТ?

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
Картинки с результатами работы не доступны, помёрли.
Sign up to leave a comment.

Articles