Как перевернуть текст вертикально / горизонтально с помощью php? - PullRequest
1 голос
/ 19 февраля 2010

Кто-нибудь знает, как этого добиться?

Ответы [ 5 ]

1 голос
/ 20 февраля 2010

Не проверено ... но похоже, что оно должно работать, состоящее из других функций 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 ) для создания изображения из текстовой строки, а затем запустите его через соответствующую функцию, которую я написал выше ...

1 голос
/ 20 февраля 2010

Вы можете использовать какую-то хитрость подстановки шрифтов, например здесь , или вы можете использовать версию PHP ImageMagick .

.
1 голос
/ 20 февраля 2010

Я предполагаю из ваших тегов, что вы хотите перевернуть изображение GD.

Вы имеете в виду флип, как в повороте? Это можно сделать с помощью imagerotate:

Поворот изображения на заданный угол в градусах.

Центр поворота является центром изображения, а повернутое изображение может иметь размеры, отличные от исходного изображения.

Или вы имеете в виду зеркало изображение? Нет никакого способа для этого из коробки, но возможно этот фрагмент кода помогает. (Однако он не очень производительный, потому что копирует пиксель за пикселем.)

Для быстрых расширенных операций редактирования изображений, ImageMagick - лучший инструмент. Если вы используете виртуальный хостинг, он должен быть установлен вашим провайдером для работы.

0 голосов
/ 10 июня 2014

Чтобы добавить вертикальный текст к существующему изображению в 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, поэтому текст на изображении диагональный

0 голосов
/ 20 февраля 2010

Может быть, что-то так просто, как это?

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)
...