Php 如何动态创建具有形状和半径的图像?

Php 如何动态创建具有形状和半径的图像?,php,image,gd,Php,Image,Gd,我正在使用php图像gd库进行产品设计创建。用户可以选择形状并设置左上角、右上角、左下角和右下角的半径值,根据用户选择,图像将创建该形状和半径的形状。我可以设置图像左上角的半径和形状,但无法获得设置右上角的方式,根据用户选择的左下和右下半径 这是我的代码: <form method="post" name="myform"> <input type="text" value="20" name="w" /> <input type="text" value="2

我正在使用php图像gd库进行产品设计创建。用户可以选择形状并设置左上角、右上角、左下角和右下角的半径值,根据用户选择,图像将创建该形状和半径的形状。我可以设置图像左上角的半径和形状,但无法获得设置右上角的方式,根据用户选择的左下和右下半径

这是我的代码:

<form method="post" name="myform">

<input type="text" value="20" name="w" />

<input type="text" value="20" name="l" />

<div>
<label>Left Top </label>
<select name="shape1">
    <option value="round">round</option>
    <option value="square">square</option>

</select>
<label>Radius</label>
<select name="valbr1">
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="10">10</option>
</select>

</div>


<div>
<label>Right Top </label>
<select name="shape2">
    <option value="round">round</option>
    <option value="square">square</option>

</select>
<label>Radius</label>
<select name="valbr2">
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="10">10</option>
</select>

</div>


<div>
<label>Left Bottom </label>
<select name="shape3">
    <option value="round">round</option>
    <option value="square">square</option>

</select>
<label>Radius</label>
<select name="valbr3">
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="10">10</option>
</select>

</div>

<div>
<label>Right Bottom </label>
<select name="shape4">
    <option value="round">round</option>
    <option value="square">square</option>

</select>
<label>Radius</label>
<select name="valbr4">
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="10">10</option>
</select>

</div>
<input type="submit" name="submit">

</form>

if(isset($_POST['submit']))
{
$w = $_POST['w'];
$l = $_POST['l'];

$corner_shape[1] = $_POST['shape1'];
$corner_shape[2] = $_POST['shape2'];
$corner_shape[3] = $_POST['shape3'];
$corner_shape[4] = $_POST['shape4'];
$corner_val[1] = $_POST['valbr1'];
$corner_val[2] = $_POST['valbr2'];
$corner_val[3] = $_POST['valbr3'];
$corner_val[4] = $_POST['valbr4'];

$canvas_inner_width= $w*4;
$canvas_inner_height= $l*4;
$canvas_width=$canvas_inner_width+75;
$canvas_height=$canvas_inner_height+75;
$canvas = imagecreatetruecolor($canvas_width, $canvas_height);

function centertext($width ,$height,$w)
{
    $width = $width;
    $height = $height;

     $im = ImageCreate($width, $height);
     $bg = ImageColorAllocate($im, 0, 0, 0);
     $border = ImageColorAllocate($im, 0, 0, 0);
     ImageRectangle($im, 0, 0, $width - 1, $height - 1, $border);
     $text = $w;

        $textcolor = ImageColorAllocate($im, 255, 255, 255);
     // Font Size
        $font = 3;
         $font_width = ImageFontWidth($font);
        $font_height = ImageFontHeight($font);

        $text_width = $font_width * strlen($text);
        // Position to align in center
        $position_center = ceil(($width - $text_width) / 2);
         /*
        -----------
        Text Height
        -----------
        */
     $text_height = $font_height;
     // Position to align in abs middle
    $position_middle = ceil(($height - $text_height) / 2);
    ImageString($im, $font,  $position_center, $position_middle, $text, $textcolor);
    $white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
    // Draw a  line
    if($width < $height)
    {

    imageline($im, 0, 0, 0, $height, $white);   
    }
    else
    {
    imageline($im, 0, 0, $width, 0, $white);
    }
    //return array ($position_center , $position_middle); 
     return $im ;
}
$width = $canvas_inner_width;
$height = 15;
$im = centertext($width , $height, $w);
$sx = imagesx($im);
$sy = imagesy($im);
$marge_right = $canvas_width/2 - $sx/2;
$marge_bottom = 20;
//Merge the im onto our photo with an opacity of 50%
imagecopymerge($canvas, $im, imagesx($canvas) - $sx - $marge_right, imagesy($canvas) - $sy - $marge_bottom, 0, 0, imagesx($im), imagesy($im), 100);
$width = 15;
$height = $canvas_inner_height;
$im_vertical = centertext($width , $height ,$l);

$marge_right = 10;
$marge_bottom = $canvas_width/2 - $sx/2;

$sx = imagesx($im_vertical);
$sy = imagesy($im_vertical);

imagecopymerge($canvas, $im_vertical, imagesx($canvas) - $sx - $marge_right, imagesy($canvas) - $sy - $marge_bottom, 0, 0, imagesx($im_vertical), imagesy($im_vertical), 100);

/* create new image which show product design*/
$canvas_inner = imagecreatetruecolor($canvas_inner_width, $canvas_inner_height);
imagesetthickness($canvas_inner, 5);

$white = imagecolorallocate($canvas_inner,  0, 83, 150);
imagerectangle($canvas_inner, 0, 0, $canvas_inner_width, $canvas_inner_height, $white);
function draw_roundrectangle($img, $x1, $y1, $x2, $y2, $radius, $color,$corner_shape,$corner_val) {
//imagesetthickness($canvas_inner, 2);
if($corner_val[1] !='')
{
$radius=$corner_val[1];
$radius=$radius*4;
switch ($corner_shape[1]) 
{
case "round":

imagesetthickness($img, 3);

  $png_imagec1 = imagecreate($radius, $radius);
                 imagecolorallocate($png_imagec1, 0, 0, 0);
                 imagesetthickness($png_imagec1, 3);
                 $gray_notchc1 = imagecolorallocate($png_imagec1, 0, 83, 150);
                 $bluec1 = imagecolorallocate($png_imagec1, 102, 102, 102);
                 $xc = 0;
                 $yc = 0;
                 $wc = imagesx($png_imagec1) - 1;
                 $zc = imagesy($png_imagec1) - 1;
                 imageline($png_imagec1, $xc, $yc, $xc, $yc+$zc, $bluec1);
                 imageline($png_imagec1, $xc, $yc, $xc+$wc, $yc, $bluec1);
                 imagearc($png_imagec1,$x1+$radius, $y1+$radius, $radius*2, $radius*2, 180 , 270, $gray_notchc1);
                 imagecopymerge($img, $png_imagec1, 0, 0, 0, 0, imagesx($png_imagec1), imagesy($png_imagec1), 100);

break;

default:

}


}


}

$color=imagecolorallocate($canvas_inner, 0, 83, 150);
draw_roundrectangle($canvas_inner,0,0,$canvas_inner_width,$canvas_inner_height,4,$color ,$corner_shape,$corner_val);


$canvas_inner_sx = imagesx($canvas_inner);
$canvas_inner_sy = imagesy($canvas_inner); 
$canvas_sx = imagesx($canvas);
$canvas_sy = imagesy($canvas);
$x_co = ($canvas_sx/2)-($canvas_inner_sx/2);
$y_co = ($canvas_sy/2)-($canvas_inner_sy/2);

imagecopymerge($canvas, $canvas_inner, ceil($x_co), ceil($y_co), 0, 0, imagesx($canvas_inner), imagesy($canvas_inner), 100); 
header('Content-Type: image/jpeg');

imagejpeg($canvas);
imagedestroy($canvas);
}

左上角
圆形的
广场
半径
6.
7.
10
右上方
圆形的
广场
半径
6.
7.
10
左下角
圆形的
广场
半径
6.
7.
10
右下角
圆形的
广场
半径
6.
7.
10
如果(isset($_POST['submit']))
{
$w=$_POST['w'];
$l=$_POST['l'];
$corner_shape[1]=$_POST['shape1'];
$corner_shape[2]=$_POST['shape2'];
$corner_shape[3]=$u POST['shape3'];
$corner_shape[4]=$u POST['shape4'];
$corner_val[1]=$_POST['valbr1'];
$corner_val[2]=$_POST['valbr2'];
$corner_val[3]=$_POST['valbr3'];
$corner_val[4]=$_POST['valbr4'];
$canvas_inner_width=$w*4;
$canvas_inner_height=$l*4;
$canvas\u width=$canvas\u inner\u width+75;
$canvas\u height=$canvas\u inner\u height+75;
$canvas=imageCreateTureColor($canvas\u width,$canvas\u height);
函数中心文本($width,$height,$w)
{
$width=$width;
$height=$height;
$im=ImageCreate($width,$height);
$bg=ImageColorAllocate($im,0,0,0);
$border=ImageColorAllocate($im,0,0,0);
ImageRectangle($im,0,0,$width-1,$height-1,$border);
$text=$w;
$textcolor=ImageColorAllocate($im,255,255,255);
//字号
$font=3;
$font_WITH=IMAGEFONTWITH($font);
$font\U height=ImageFontHeight($font);
$text\u width=$font\u width*strlen($text);
//在中心对齐的位置
$position\u center=ceil($width-$text\u width)/2);
/*
-----------
文本高度
-----------
*/
$text\u height=$font\u height;
//在abs中间对齐的位置
$position\u middle=ceil($height-$text\u height)/2);
ImageString($im、$font、$position\u center、$position\u middle、$text、$textcolor);
$white=imagecolorallocate($im,0xFF,0xFF,0xFF);
//划一条线
如果($width<$height)
{
图像线($im,0,0,0,$height,$white);
}
其他的
{
图像线($im,0,0,$width,0,$white);
}
//返回数组($position\u center,$position\u middle);
返回$im;
}
$width=$canvas\u inner\u width;
$height=15;
$im=centertext($width,$height,$w);
$sx=imagesx($im);
$sy=imagesy($im);
$marge_right=$canvas_width/2-$sx/2;
$marge_bottom=20;
//将im合并到我们的照片上,不透明度为50%
imagecopymerge($canvas,$im,imagesx($canvas)-$sx-$marge_right,imagesy($canvas)-$sy-$marge_bottom,0,0,imagesx($im),imagesy($im),100);
$width=15;
$height=$canvas\u inner\u height;
$im_vertical=centertext($width,$height,$l);
$marge_right=10;
$marge_bottom=$canvas_width/2-$sx/2;
$sx=imagesx($im_垂直);
$sy=imagesy($im_垂直);
imagecopymerge($canvas、$im_vertical、imagesx($canvas)-$sx-$marge_right、imagesy($canvas)-$sy-$marge_bottom、0、imagesx($im_vertical)、imagesy($im_vertical)、100);
/*创造展示产品设计的新形象*/
$canvas\u inner=imagecreatetruecolor($canvas\u inner\u width,$canvas\u inner\u height);
imagesetthickness($canvas_inner,5);
$white=imagecolorallocate($canvas_-inner,0,83150);
imagerectangle($canvas\u inner,0,0,$canvas\u inner\u width,$canvas\u inner\u height,$white);
函数绘制圆形矩形($img、$x1、$y1、$x2、$y2、$radius、$color、$corner\u shape、$corner\u val){
//imagesetthickness($canvas_inner,2);
如果($corner_val[1]!='')
{
$radius=$corner_val[1];
$radius=$radius*4;
开关($corner_shape[1])
{
案例“圆形”:
imagesetthickness($img,3);
$png_imagec1=imagecreate($radius,$radius);
imagecolorallocate($png_imagec1,0,0,0);
imagesetthickness($png_imagec1,3);
$gray_notchc1=imagecolorallocate($png_imagec1,0,83150);
$bluec1=imagecolorallocate($png_imagec1,102,102,102);
$xc=0;
$yc=0;
$wc=imagesx($png_imagesc1)-1;
$zc=imagesy($png_imagec1)-1;
imageline($png_imagec1、$xc、$yc、$xc、$yc+$zc、$bluec1);
imageline($png_imagec1、$xc、$yc、$xc+$wc、$yc、$bluec1);
imagearc($png_imagec1,$x1+$radius,$y1+$radius,$radius*2,$radius*2180270,$gray_notchc1);
imagecopymerge($img,$png_imagec1,0,0,0,imagesx($png_imagec1),imagesy($png_imagec1),100);
打破
违约:
}
}
}
$color=imagecolorallocate($canvas_-inner,0,83150);
绘制圆形矩形($canvas\u-inner,0,0,$canvas\u-inner\u-width,$canvas\u-inner\u-height,4,$color,$corner\u-shape,$corner\u-val);
$canvas\u inner\u sx=imagesx($canvas\u inner);
$canvas\u inner\u sy=imagesy($canvas\u inner);
$canvas_sx=imagesx($canvas);
$canvas_sy=imagesy($canvas);
$x_co=($canvas_sx/2)-($canvas_inner_sx/2);
$y_co=($canvas_sy/2)-($canvas_Internal_sy/2);
imagecopymerge($canvas,$canvas_-inner,ceil($x_-co),ceil($y_-co),0,0,imagesx($canvas_-inner),imagesy($canvas_-inner),100);
标题(“内容类型:图像/jpeg”);
图像JPEG($canvas);
图像销毁(帆布);
}

您好,这有很多代码需要查看,您是否可以将问题缩小一点?你是在问怎么做吗?是的,根据用户选择的半径和形状进行圆角和倒角。你可以在任何php文件中检查此代码。如果用户从下拉列表中仅为左上角和右上角选择半径和形状,则只有上述形状会根据半径进行更改。我已经检查了相同的url。请查看我的代码。@php\u dev代码为工作我只是有一个问题,为什么不在css中做呢?这不是很容易吗?我需要根据用户的选择动态创建图像