简体   繁体   English

PHP图像调整大小并动态舍入图像角

[英]PHP image resize and rounded image corners dynamically

I'm working of a script that dynamically ads rounded edges to an image then crops it down to a certain size. 我正在使用一个脚本,该脚本可以动态地将圆角的边缘广告到图像上,然后将其裁剪为一定大小。 At the moment the script ads the rounded edges to the picture but i cannot get it so the original image is resized to fit within the dimensons of the final outputted image (140px x 120px) The problem is that the orginal uploaded image depending on it's orginal dimensions change the size it is in the final PNG 目前,脚本将图片的圆角边缘广告了,但我无法获取它,因此原始图像的大小被调整为适合最终输出图像的尺寸(140px x 120px)。问题是原始图像取决于原始图像尺寸会更改最终PNG中的尺寸

{   
 $image_file = $_FILES['image']['tmp_name'];

    $corner_radius = isset($_GET['radius']) ? $_GET['radius'] : 20; // The default corner radius is set to 20px
    $topleft = (isset($_GET['topleft']) and $_GET['topleft'] == "no") ? false : true; // Top-left rounded corner is shown by default
    $bottomleft = (isset($_GET['bottomleft']) and $_GET['bottomleft'] == "no") ? false : true; // Bottom-left rounded corner is shown by default
    $bottomright = (isset($_GET['bottomright']) and $_GET['bottomright'] == "no") ? false : true; // Bottom-right rounded corner is shown by default
    $topright = (isset($_GET['topright']) and $_GET['topright'] == "no") ? false : true; // Top-right rounded corner is shown by default
    $imagetype=$_FILES['image']['type'];

    $endsize=$corner_radius;
    $startsize=$endsize*3-1;
    $arcsize=$startsize*2+1;

    if (($imagetype=='image/jpeg') or ($imagetype=='jpg')) {
    $image = imagecreatefromjpeg($image_file);
    } else {
    if (($imagetype=='GIF') or ($imagetype=='gif')) {
    $image = imagecreatefromgif($image_file);
    } else {
    $image = imagecreatefrompng($image_file);
    }
    }

    $forecolor ='#ffffff';
    $size = getimagesize($image_file);
    // Top-left corner
    $background = imagecreatetruecolor($size[0],$size[1]);
    imagecopymerge($background, $image, 0, 0, 0, 0, $size[0], $size[1], 100);
    $startx=$size[0]*2-1;
    $starty=$size[1]*2-1;
    $im_temp = imagecreatetruecolor($startx,$starty);
    imagecopyresampled($im_temp, $background, 0, 0, 0, 0, $startx, $starty, $size[0], $size[1]);
    $bg = imagecolorallocate($im_temp, 255,255,255);
    $fg = imagecolorallocate($im_temp,  255,255,255);

    if ($topleft == true) {
    if(!imagearc($im_temp, $startsize, $startsize, $arcsize, $arcsize, 180,270,$bg))echo "nope";
    imagefilltoborder($im_temp,0,0,$bg,$bg);
    }
    // Bottom-left corner

    // Top-right corner
    if ($topright == true) {
    imagearc($im_temp, $startx-$startsize, $startsize,$arcsize, $arcsize, 270,360,$bg);
    imagefilltoborder($im_temp,$startx,0,$bg,$bg);
    }


    $image = imagecreatetruecolor(140,120);
    imagecopyresampled($image, $im_temp, 0, 0, 0, 0, $size[0],$size[1],$starty+1310,$startx+1500);


    // Output final image


    if(!imagepng($image,'hello.png')) echo "boo";
    if(!imagedestroy($image)) echo "2";
    if(!imagedestroy($background)) echo "3";
    if(!imagedestroy($im_temp)) echo "4";

    }

EDIT: 编辑:

My question is how to get the orginal image reized so it fits into the 140 x 120 image that is processed with the rounded edges? 我的问题是如何调整原始图像的大小,使其适合使用圆角边缘处理的140 x 120图像?

here is a link to a PHP function that will resize any image to any arbitrary size, using crop-to-fit or letterboxing to maintain aspect ratio. 这是一个PHP函数的链接,该函数将使用裁剪到适合或letterbox保持纵横比的方式将任何图像调整为任意大小。 it has a pretty thorough explaination. 它有相当详尽的解释。 you will want to add your rounded edges AFTER the resize however. 您需要在调整大小后添加圆角边缘。

http://www.spotlesswebdesign.com/blog.php?id=1 http://www.spotlesswebdesign.com/blog.php?id=1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM