使用 GD 将图像旋转 90 度 [关闭]

Posted

技术标签:

【中文标题】使用 GD 将图像旋转 90 度 [关闭]【英文标题】:Rotate image 90 degrees using GD [closed] 【发布时间】:2014-01-03 09:42:28 【问题描述】:

我正在尝试生成一些文本并将整个图像旋转 90 度,而不是单个字母。它必须是透明的 PNG,并且不使用现有图像作为基础。

谢谢

【问题讨论】:

很好,您想从我们这里得到什么? ._. php.net/manual/en/function.imagerotate.php? 到目前为止有什么尝试? 【参考方案1】:

使用 gd 库中的imagerotate()

$img = imagerotate($img, 90, 0);

第一个参数是图像源,即来自imagecreatefrompng() 第二个参数是度 第三个参数是背景颜色

在http://www.php.net/manual/en/function.imagerotate.php上查看更多信息

【讨论】:

【参考方案2】:

试试这个脚本

define("DEFAULT_FONT", "fonts/BebasNeue-webfont.ttf");
define("DEFAULT_COLOR", "ed217c");
define("DEFAULT_SIZE", 24);
define("DEFAULT_ANGLE", 0);
define("DEFAULT_PADDING", 10);
define("DEFAULT_SPACING", 0);

$text = $_GET['text'];
if(isset($_GET['transform'])):
    switch ($_GET['transform'])
        case 'uc':
            $text = strtoupper($_GET['text']);
            break;

        case 'lc':
            $text = strtolower($_GET['text']);
            break;

        case 'ucf':
            $text = ucfirst($_GET['text']);
            break;

        case 'ucw':
            $text = ucwords($_GET['text']);
            break;
    
endif;

$font = $_GET['font'] ? $_GET['font'] : DEFAULT_FONT;
$color = (strlen($_GET['color']) == 6 && ctype_alnum($_GET['color']))  ? "0x" . $_GET['color'] : "0x" . DEFAULT_COLOR;
$size = (is_numeric($_GET['size'])) ? $_GET['size'] : DEFAULT_SIZE;
$angle = (is_numeric($_GET['angle'])) ? $_GET['angle'] : DEFAULT_ANGLE;
$padding = (is_numeric($_GET['padding'])) ? $_GET['padding']*4 : DEFAULT_PADDING*4;
$spacing = (is_numeric($_GET['spacing'])) ? $_GET['spacing'] : DEFAULT_SPACING;
$text_dimensions = calculateTextDimensions($text, $font, $size, $angle, $spacing);
$image_width = $text_dimensions["width"] + $padding;
$image_height = $text_dimensions["height"] + $padding;

$new_image = imagecreatetruecolor($image_width, $image_height);
ImageFill($new_image, 0, 0, IMG_COLOR_TRANSPARENT);
imagesavealpha($new_image, true);
imagealphablending($new_image, false);
imagettftextSp($new_image, $size, $angle, $text_dimensions["left"] + ($image_width / 2) - ($text_dimensions["width"] / 2), $text_dimensions["top"] + ($image_height / 2) - ($text_dimensions["height"] / 2), $color, $font, $text, $spacing);
imagepng($new_image);
imagerotate($new_image, 90, 0);
imagedestroy($new_image);

function imagettftextSp($image, $size, $angle, $x, $y, $color, $font, $text, $spacing = 0)

    if ($spacing == 0)
    
        imagettftext($image, $size, $angle, $x, $y, $color, $font, $text);
    
    else
    
        $temp_x = $x;
        for ($i = 0; $i < strlen($text); $i++)
        
            $bbox = imagettftext($image, $size, $angle, $temp_x, $y, $color, $font, $text[$i]);
            $temp_x += $spacing + ($bbox[2] - $bbox[0]);
        
    


function calculateTextDimensions($text, $font, $size, $angle, $spacing) 
    $rect = imagettfbbox($size, $angle, $font, $text);
    $minX = min(array($rect[0],$rect[2],$rect[4],$rect[6]));
    $maxX = max(array($rect[0],$rect[2],$rect[4],$rect[6]));
    $minY = min(array($rect[1],$rect[3],$rect[5],$rect[7]));
    $maxY = max(array($rect[1],$rect[3],$rect[5],$rect[7]));
    $spacing = ($spacing*(strlen($text)+2));
    return array(
        "left"   => abs($minX) - 1,
        "top"    => abs($minY) - 1,
        "width"  => ($maxX - $minX)+$spacing,
        "height" => $maxY - $minY,
        "box"    => $rect
    );

    header("content-type: image/png");

您可以通过 IMG SRC 标签将旋转角度传递给脚本。我在 Wordpress 安装中使用它,但我生成的代码看起来像这样......

<img src="<?php echo get_template_directory_uri(); ?>/imgCreate.php?text=<?php echo $page->post_title; ?>&font=&transform=&size=45&angle=90&color=&padding=18&spacing=0" />

【讨论】:

涵盖所有要求,然后是一些。未使用的任何内容都将默认为顶部的定义。唯一需要注意的是旋转不采用负值,因此 -90 将是 270。OP 没有指定顺时针或逆时针 90 度。【参考方案3】:

这是使用 GD lib 旋转图像的最佳方法。

$img = new Imagick('image.png'); 
$img->rotateImage( new ImagickPixel('none'), 7 ); 
$img->trimImage ( 0 );  
$img->writeImage('rotateImage.png');  
$img->destroy();

【讨论】:

使用 gd。这是 CSS。 @putvande-i 相信这就是答案。 透明的PNG,而不是JPG 那是imagemagick,不是gd...

以上是关于使用 GD 将图像旋转 90 度 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将图像旋转 90 度 php

Leetcode——旋转图像(90度)

如何将包含图像的画布旋转 90、180、270 度?

CGAffineTransform 旋转 90 度

如何将计算机绘图旋转 90 度

Android:将矢量图像旋转 90 度