PHP图像动态调整大小和圆角图像

Posted

技术标签:

【中文标题】PHP图像动态调整大小和圆角图像【英文标题】:PHP image resize and rounded image corners dynamically 【发布时间】:2011-01-10 13:24:20 【问题描述】:

我正在编写一个脚本,该脚本会动态地将圆形边缘添加到图像中,然后将其裁剪为特定大小。目前,脚本将圆角边缘添加到图片中,但我无法得到它,因此调整原始图像的大小以适应最终输出图像的尺寸(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";

    

编辑:

我的问题是如何重新调整原始图像,使其适合经过圆角处理的 140 x 120 图像?

【问题讨论】:

您不想在调整大小后添加舍入吗? 【参考方案1】:

这里是一个 php 函数的链接,它可以将任何图像调整为任意大小,使用裁剪以适应或信箱来保持纵横比。它有一个非常彻底的解释。但是,您将希望在调整大小后添加圆角。

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

【讨论】:

链接不可达。

以上是关于PHP图像动态调整大小和圆角图像的主要内容,如果未能解决你的问题,请参考以下文章

PHP图像动态调整大小与存储调整大小的图像

PHP 动态调整图像大小

PHP 图像动态调整大小

PHP 动态调整图像大小

动态调整图像大小

根据文本大小调整图像大小