Intereting Posts
Доступ к вложенным свойствам json Как я могу запустить сценарий, когда субдомен достигнет определенного уровня пропускной способности? Доступ к элементам объекта JSON в PHP отдельная строка в два по заданной позиции Как предотвратить сканирование в зависимости от XPath от содержимого страниц Иногда PHP-сеанс теряется при использовании session_regenerate_id Запрещенная ошибка при отправке простой PHP-формы Как сделать приращение переменной путем добавления переменной счетчика в конец внутри цикла while php отправить электронное письмо со вложением php возвращает только дублированные записи из массива Почему mysqli fetch () возвращает пустые результаты из столбца longtext? 500 – внутренняя ошибка сервера Как получить значение ассоциативного массива HTML в PHP с помощью строки? Как удалить сеанс NOT CURRENT? Количество запросов MySQL, выполняемых на странице

Перспектива изображения PHP GD

Привет, возможно ли преобразовать перспективы изображений … так что это новая форма – равнобедренная трапеция? Я видел решение с использованием imagemagick, но это связано с возможным переписыванием всего моего сценария манипуляции с картинками … (не говоря уже об обучении, у которого я аллергия)

GD не поддерживает 3D-манипуляции с изображениями 🙁 Решение с использованием ImageMagick не является сложным: http://valokuva.org/?p=112

Я улучшил функцию, которую Джеймс опубликовал.

Добавлено:

  • вертикальная / горизонтальная поддержка перспективы
  • прозрачность
  • он больше похож на вращающиеся объекты в 3d сейчас (более близкие объекты больше, а дальше – меньше)

Вот моя функция:

define("TOP",0); define("BOTTOM",1); define("LEFT",2); define("RIGHT",3); function perspective($i,$gradient=0.85,$rightdown=TOP,$background=0xFFFFFF, $alpha=0) { $w=imagesx($i); $h=imagesy($i); $col=imagecolorallocatealpha($i,($background>>16)&0xFF,($background>>8)&0xFF,$background&0xFF,$alpha); $mult=5; $li=imagecreatetruecolor($w*$mult,$h*$mult); imagealphablending($li,false); imagefilledrectangle($li,0,0,$w*$mult,$h*$mult,$col); imagesavealpha($li,true); imagecopyresized($li,$i,0,0,0,0,$w*$mult,$h*$mult,$w,$h); imagedestroy($i); $w*=$mult; $h*=$mult; $image=imagecreatetruecolor($w,$h); imagealphablending($image,false); imagefilledrectangle($image,0,0,$w,$h,$col); imagealphablending($image,true); imageantialias($image,true); $test=$h*$gradient; $rdmod=$rightdown%2; $min=1; if($rightdown<2){ for($y=0;$y<$h;$y++){ $ny=$rdmod? $y : $h-$y; $off=round((1-$gradient)*$w*($ny/$h)); $t=((1-pow(1-pow(($ny/$h),2),0.5))*(1-$gradient)+($ny/$h)*$gradient); $nt=$rdmod? $t : 1-$t; if(abs(0.5-$nt)<$min){ $min=abs(0.5-$nt); $naty=$off; } imagecopyresampled($image,$li, round($off/2),$y, 0,abs($nt*$h), $w-$off,1, $w,1); } } else { for($x=0;$x<$w;$x++){ $nx=$rdmod? $x : $w-$x; $off=round((1-$gradient)*$h*($nx/$w)); $t=((1-pow(1-pow(($nx/$w),2),0.5))*(1-$gradient)+($nx/$w)*$gradient); $nt=$rdmod? $t : 1-$t; if(abs(0.5-$nt)<$min){ $min=abs(0.5-$nt); $natx=$off; } imagecopyresampled($image,$li, $x,round($off/2), abs($nt*$w),0, 1,$h-$off, 1,$h); } } imagedestroy($li); imageantialias($image,false); imagealphablending($image,false); imagesavealpha($image,true); $i=imagecreatetruecolor(($w+$naty)/$mult,($h+$natx)/$mult); imagealphablending($i,false); imagefilledrectangle($i,0,0,($w+$naty)/$mult,($h+$natx)/$mult,$col); imagealphablending($i,true); imageantialias($i,true); imagecopyresampled($i,$image,0,0,0,0,($w+$naty)/$mult,($h+$natx)/$mult,$w,$h); imagedestroy($image); imagealphablending($i,false); imageantialias($i,false); imagesavealpha($i,true); return $i; } 

Примеры:

 Original image: http://imgur.com/iX5Aski 

Использование функции:

 $img=perspective($img,0.5,TOP,0xFFFFFF,127); 

Результат:

 $img=perspective($img,0.2,RIGHT,0xFFFFFF,127); 

Результат: