imagerotate(), Tekst draaien, plaatje niet
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
function centerText($text, $im_width, $im_height, $txt_height, $angle, $ttf, $ccw = false) {
if ($angle > 90) {
return false;
}
if(!$ccw) {
$angle *= -1;
}
$coords = imagettfbbox($txt_height, $angle, $ttf, $text);
// horizontaal
$x_adjust = (($angle >= 0) ? $coords[6] : $coords[0]) * -1;
$width = (($angle >= 0) ? $coords[2] : $coords[4]) + $x_adjust;
$offset_x = round(($im_width - $width) / 2) + $x_adjust;
// vertikaal
$y1 = (($angle >= 0) ? $coords[5] : $coords[7]) * -1;
$y2 = ($angle >= 0) ? $coords[1] : $coords[3];
$half_height = ($y1 + $y2) / 2;
if ($angle >= 0) {
$offset_y = round($img_height / 2) + $half_height + $y2;
}
else {
$offset_y = round($img_height / 2) - $half_height + $y1;
}
return array($offset_x, $offset_y);
}
$text = 'Phphulp';
$font = '../fonts/arial.ttf';
$offset = centerText($text, 350, 150, 14, 30, $font);
imagettftext($img, 14, 330, $offset[0], $offset[1], $color, $font, $text);
?>
function centerText($text, $im_width, $im_height, $txt_height, $angle, $ttf, $ccw = false) {
if ($angle > 90) {
return false;
}
if(!$ccw) {
$angle *= -1;
}
$coords = imagettfbbox($txt_height, $angle, $ttf, $text);
// horizontaal
$x_adjust = (($angle >= 0) ? $coords[6] : $coords[0]) * -1;
$width = (($angle >= 0) ? $coords[2] : $coords[4]) + $x_adjust;
$offset_x = round(($im_width - $width) / 2) + $x_adjust;
// vertikaal
$y1 = (($angle >= 0) ? $coords[5] : $coords[7]) * -1;
$y2 = ($angle >= 0) ? $coords[1] : $coords[3];
$half_height = ($y1 + $y2) / 2;
if ($angle >= 0) {
$offset_y = round($img_height / 2) + $half_height + $y2;
}
else {
$offset_y = round($img_height / 2) - $half_height + $y1;
}
return array($offset_x, $offset_y);
}
$text = 'Phphulp';
$font = '../fonts/arial.ttf';
$offset = centerText($text, 350, 150, 14, 30, $font);
imagettftext($img, 14, 330, $offset[0], $offset[1], $color, $font, $text);
?>
Gewijzigd op 18/07/2014 13:29:18 door Ger van Steenderen
if ($angle > 90) {
Dus als de rotatie groter is dan 90 graden dan blokkeert het script neem ik aan?
Verder, centreert dit script de tekst?
Klein foutje op regel 1, $ttf moet $font zijn.
Yep, een beetje geanticipeerd op het naamplaatje ;-) (we willen geen visite met een verrekte nek)
>> Verder, centreert dit script de tekst?
Dat is wel de bedoeling.
Maar dit is wel een basis voorbeeld.
Hoe imagettfbbox werkt:
Wat je van deze functie terug krijgt is een array met de x en y waardes van de hoekpunten van de gedraaide rechthoek (t.o.v het invoegpunt)
0 => Ax
1 => Ay
2 => Bx
3 => By
4 => Cx
5 => Cy
6 => Dx
7 => Dy
Dan kan je aan de hand van de hoek (en de eventuele uitlijningen) bepalen waar de text moet starten.
Gewijzigd op 17/07/2014 21:21:49 door Ger van Steenderen
Top, alleen nu zit ik nog met het probleem met de achtergrond kleur...
Daar heb je geen last van, je zet in één keer text over het originele plaatje
Na even sleutelen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
function centerText($text, $im_width, $im_height, $txt_height, $angle, $font, $ccw = false) {
if ($angle > 90) {
return false;
}
if(!$ccw) {
$angle *= -1;
}
$coords = imagettfbbox($txt_height, $angle, $font, $text);
// horizontaal
$x_adjust = (($angle >= 0) ? $coords[0] : $coords[6]) * -1;
$width = (($angle >= 0) ? $coords[2] : $coords[4]) + $x_adjust;
$offset_x = round(($im_width - $width) / 2) + $x_adjust;
// vertikaal
$y1 = (($angle >= 0) ? $coords[5] : $coords[7]) * -1;
$y2 = ($angle >= 0) ? $coords[1] : $coords[3];
$half_height = ($y1 + $y2) / 2;
if ($angle >= 0) {
$offset_y = round($im_height / 2) + $half_height + $y2;
}
else {
$offset_y = round($im_height / 2) - $half_height + $y1;
}
return array($offset_x, $offset_y);
}
$dest = imagecreatefromjpeg('../custom_images/121536.jpg');
$im = imagecreatetruecolor(1000, 1000);
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, $black);
$text = 'Phphulp';
$font = '0001.ttf';
$offset = centerText($text, 350, 150, 14, 30, $font);
$color = imagecolorallocate($im, 233, 14, 91);
imagettftext($im, 14, 30, $offset[0], $offset[1], $color, $font, $text);
imagecopy($dest, $im, 0, 0, 20, 13, 1000, 1000);
header('Content-Type: image/png');
imagepng($dest);
?>
function centerText($text, $im_width, $im_height, $txt_height, $angle, $font, $ccw = false) {
if ($angle > 90) {
return false;
}
if(!$ccw) {
$angle *= -1;
}
$coords = imagettfbbox($txt_height, $angle, $font, $text);
// horizontaal
$x_adjust = (($angle >= 0) ? $coords[0] : $coords[6]) * -1;
$width = (($angle >= 0) ? $coords[2] : $coords[4]) + $x_adjust;
$offset_x = round(($im_width - $width) / 2) + $x_adjust;
// vertikaal
$y1 = (($angle >= 0) ? $coords[5] : $coords[7]) * -1;
$y2 = ($angle >= 0) ? $coords[1] : $coords[3];
$half_height = ($y1 + $y2) / 2;
if ($angle >= 0) {
$offset_y = round($im_height / 2) + $half_height + $y2;
}
else {
$offset_y = round($im_height / 2) - $half_height + $y1;
}
return array($offset_x, $offset_y);
}
$dest = imagecreatefromjpeg('../custom_images/121536.jpg');
$im = imagecreatetruecolor(1000, 1000);
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, $black);
$text = 'Phphulp';
$font = '0001.ttf';
$offset = centerText($text, 350, 150, 14, 30, $font);
$color = imagecolorallocate($im, 233, 14, 91);
imagettftext($im, 14, 30, $offset[0], $offset[1], $color, $font, $text);
imagecopy($dest, $im, 0, 0, 20, 13, 1000, 1000);
header('Content-Type: image/png');
imagepng($dest);
?>
Doe ik (Laatste regel):
imagepng($dest);
Krijg ik een zwarte achtergrond met de tekst
Doe ik:
imagepng($im);
Krijg ik een transparante achtergrond met de tekst
Waarom wordt de achtergrond zwart?
Is een extra handeling.
Er ging trouwens iets niet goed met de functie, ik heb regel 11 in het script aangepast.
Let op ook op de rotatie hoek die je opgeeft in imagettftext(). Een positieve waarde is tegen de klok in.
Waarschijnlijk vanwege mijn hints die richting op aan het begin van dit topic. Blijkbaar heb ik ook nog iets te leren, dat je bewerkingen op tekst kunt doen zonder er eerst een plaatje van te maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
function centerText($text, $im_width, $im_height, $txt_height, $angle, $font, $ccw = false) {
if ($angle > 90) {
return false;
}
if(!$ccw) {
$angle *= -1;
}
$coords = imagettfbbox($txt_height, $angle, $font, $text);
// horizontaal
$x_adjust = (($angle >= 0) ? $coords[6] : $coords[0]) * -1;
$width = (($angle >= 0) ? $coords[2] : $coords[4]) + $x_adjust;
$offset_x = round(($im_width - $width) / 2) + $x_adjust;
// vertikaal
$y1 = (($angle >= 0) ? $coords[5] : $coords[7]) * -1;
$y2 = ($angle >= 0) ? $coords[1] : $coords[3];
$half_height = ($y1 + $y2) / 2;
if ($angle >= 0) {
$offset_y = round($im_height / 2) + $half_height + $y2;
}
else {
$offset_y = round($im_height / 2) - $half_height + $y1;
}
return array($offset_x, $offset_y);
}
$im = imagecreatefrompng('../images/rvs_1_empty.png');
$black = imagecolorallocate($im, 0, 0, 0);
$text = 'Phphulp';
$font = '../ttf/0002.ttf';
imagecolortransparent($im, $black);
$offset = centerText($text, 350, 150, 14, 50, $font);
$color = imagecolorallocate($im, 233, 14, 91);
imagettftext($im, 14, 30, $offset[0], $offset[1], $color, $font, $text);
header('Content-Type: image/png');
imagepng($im);
?>
function centerText($text, $im_width, $im_height, $txt_height, $angle, $font, $ccw = false) {
if ($angle > 90) {
return false;
}
if(!$ccw) {
$angle *= -1;
}
$coords = imagettfbbox($txt_height, $angle, $font, $text);
// horizontaal
$x_adjust = (($angle >= 0) ? $coords[6] : $coords[0]) * -1;
$width = (($angle >= 0) ? $coords[2] : $coords[4]) + $x_adjust;
$offset_x = round(($im_width - $width) / 2) + $x_adjust;
// vertikaal
$y1 = (($angle >= 0) ? $coords[5] : $coords[7]) * -1;
$y2 = ($angle >= 0) ? $coords[1] : $coords[3];
$half_height = ($y1 + $y2) / 2;
if ($angle >= 0) {
$offset_y = round($im_height / 2) + $half_height + $y2;
}
else {
$offset_y = round($im_height / 2) - $half_height + $y1;
}
return array($offset_x, $offset_y);
}
$im = imagecreatefrompng('../images/rvs_1_empty.png');
$black = imagecolorallocate($im, 0, 0, 0);
$text = 'Phphulp';
$font = '../ttf/0002.ttf';
imagecolortransparent($im, $black);
$offset = centerText($text, 350, 150, 14, 50, $font);
$color = imagecolorallocate($im, 233, 14, 91);
imagettftext($im, 14, 30, $offset[0], $offset[1], $color, $font, $text);
header('Content-Type: image/png');
imagepng($im);
?>
Ik wil iedereen die mij hierbij heeft geholpen hartelijk bedanken!
Staat de text ook in het midden?