我需要用PHP制作这个效果.我知道
PHP图像过滤器中有IMG_FILTER_PIXELATE.但我需要它更流畅和浮雕?像在这张图片中:
此效果将使用户上传的任何图像变为像素化,并且图片的边缘变为红色(我知道IMG_FILTER_EDGEDETECT但我不知道如何使用它来更改边缘颜色).
我不知道该怎么做.
由于最后的答案是理论上的,似乎还不够,我已经创建了一个实际的例子:
注意:这远非“理想”和完美的像素化效果函数,但它确实起作用.您可以根据自己的需要随意编辑.
注意:这远非“理想”和完美的像素化效果函数,但它确实起作用.您可以根据自己的需要随意编辑.
<?PHP /* Function to make pixelated images * Supported input: .png .jpg .jpeg .gif * * * Created on 24.01.2011 by Henrik Peinar */ /* * image - the location of the image to pixelate * pixelate_x - the size of "pixelate" effect on X axis (default 10) * pixelate_y - the size of "pixelate" effect on Y axis (default 10) * output - the name of the output file (extension will be added) */ function pixelate($image,$output,$pixelate_x = 20,$pixelate_y = 20) { // check if the input file exists if(!file_exists($image)) echo 'File "'. $image .'" not found'; // get the input file extension and create a GD resource from it $ext = pathinfo($image,PATHINFO_EXTENSION); if($ext == "jpg" || $ext == "jpeg") $img = imagecreatefromjpeg($image); elseif($ext == "png") $img = imagecreatefrompng($image); elseif($ext == "gif") $img = imagecreatefromgif($image); else echo 'Unsupported file extension'; // now we have the image loaded up and ready for the effect to be applied // get the image size $size = getimagesize($image); $height = $size[1]; $width = $size[0]; // start from the top-left pixel and keep looping until we have the desired effect for($y = 0;$y < $height;$y += $pixelate_y+1) { for($x = 0;$x < $width;$x += $pixelate_x+1) { // get the color for current pixel $rgb = imagecolorsforindex($img,imagecolorat($img,$x,$y)); // get the closest color from palette $color = imagecolorclosest($img,$rgb['red'],$rgb['green'],$rgb['blue']); imagefilledrectangle($img,$y,$x+$pixelate_x,$y+$pixelate_y,$color); } } // save the image $output_name = $output .'_'. time() .'.jpg'; imagejpeg($img,$output_name); imagedestroy($img); } pixelate("test.jpg","testing"); ?>
这是在图像上创建像素化效果的示例函数.
以下是使用此功能的示例结果:
原版的:
像素化5px:
像素化10px:
像素化20px: