如何使用PHP垂直/水平翻转文本?

时间:2010-02-19 20:56:34

标签: php text image-processing gd flip

有谁知道如何实现这个目标?

5 个答案:

答案 0 :(得分:1)

我假设你的标签意味着翻转GD图像。

你的意思是翻转吗?这可以使用imagerotate

完成
  

使用给定角度(以度为单位)旋转图像图像。

     

旋转中心是图像的中心,旋转的图像可能具有与原始图像不同的尺寸。

或者你的意思是镜像一个图像?没有开箱即用的方法,但也许this代码片段有帮助。 (但它不是非常高效,因为它逐个像素地复制。)

对于快速高级图像编辑操作,ImageMagick是最好的工具。如果您使用的是共享主机,则需要由您的提供商安装才能正常工作。

答案 1 :(得分:1)

您可以使用某种类型的字体替换技巧,例如here,或者您可以使用PHP版ImageMagick

答案 2 :(得分:1)

未经测试......但这似乎应该有效,由其他gd函数组成(可能很慢):

function flipImageHorizontal($im){
  $width = imagesx($im);
  $height = imagesy($im);

  for($y = 0; $y < $height; $y++){          // for each column
    for($x = 0; $x < ($width >> 1); $x++){  // for half the pixels in the row       

       // get the color on the left side
       $rgb = imagecolorat($im, $x, $y);
       $colors = imagecolorsforindex($im, $rgb);
       $current_color = imagecolorallocate($im, $colors["red"], $colors["green"], $colors["blue"]);

       // get the color on the right side (mirror)
       $rgb = imagecolorat($im, $width - $x, $y);
       $colors = imagecolorsforindex($im, $rgb);
       $mirror_color = imagecolorallocate($im, $colors["red"], $colors["green"], $colors["blue"]);

       // swap the colors
       imagesetpixel($im, $x, $y, $mirror_color);        
       imagesetpixel($im, $width - $x, $y, $color);         
    }
  }
}

function flipImageVertical($im){
  $width = imagesx($im);
  $height = imagesy($im);

  for($x = 0; $x < $width; $x++){           // for each row
    for($y = 0; $y < ($height >> 1); $y++){ // for half the pixels in the col

       // get the color on the top
       $rgb = imagecolorat($im, $x, $y);
       $colors = imagecolorsforindex($im, $rgb);
       $current_color = imagecolorallocate($im, $colors["red"], $colors["green"], $colors["blue"]);

       // get the color on the bottom (mirror)
       $rgb = imagecolorat($im, $x, $height - $y);
       $colors = imagecolorsforindex($im, $rgb);
       $mirror_color = imagecolorallocate($im, $colors["red"], $colors["green"], $colors["blue"]);

       // swap the colors
       imagesetpixel($im, $x, $y, $mirror_color);        
       imagesetpixel($im, $x, $height - $y, $color);         
    }
  }
}

所以你可以使用bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )从文本字符串创建一个图像,然后通过我上面写的相应翻转函数运行它......

答案 3 :(得分:0)

也许这么简单?

function toVertical ($string)
{

   foreach (str_split($string) as $letter)
   {
       $newStr.="$letter\n";
   }
   return $newStr;
}


function toHorizontal($string)
{
   foreach(explode("\n",$string) as $letter)
   {
        $newStr.=$letter;
   }
   return $newStr;
}

$v = toVertical("This string should be printed vertically");
echo $v;
$h = toHorizontal($v);
echo $h;


---------- PHP Execute ----------
T
h
i
s

s
t
r
i
n
g

s
h
o
u
l
d

b
e

p
r
i
n
t
e
d

v
e
r
t
i
c
a
l
l
y
This string should be printed vertically
Output completed (0 sec consumed)

答案 4 :(得分:0)

要在PHP中将垂直文本添加到现有图像,请使用函数

imagettftext($im, 10, $angle, $x, $y, $black, $font, $text);

$ angle = 90时,文字将是垂直的。

示例:

http://www.php.net/manual/en/function.imagettfbbox.php#refsect1-function.imagettfbbox-returnvalues

提示:

该示例使用$ angle = 45,因此文本在图像上是对角线