[php] ImageRotate brak?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
Ik ben ff aan het spelen met de nieuwe GD functie ImageRotate; maar onder bepaalde hoeken raak ik de helft van het plaatje kwijt.

Er is helaas nog niet veel over te vinden op internet; maar hebben jullie misschien hetzelfde probleem?

Draai versie 4.3.1 van PHP (GD bundled version).

deze code gebruik ik:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$angle = $HTTP_GET_VARS['angle'];

$source = ImageCreateFromJpeg('d:\www\Apache1.3.27\htdocs\11.jpg');


$result = ImageRotate($source, $angle, 0);


Header ("Content-type: image/JPEG");
ImageJPEG($result);
ImageDestroy($result);
?>


voorbeeld van 90 graden rotatie:

http://www.vddh.com/pix/rot.jpg

[ Voor 10% gewijzigd door Willem2 op 27-05-2003 21:54 ]

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • Rob
  • Registratie: Februari 2000
  • Niet online

Rob

Gebruikt deze functie niet de originele hoogte en breedte van het plaatje? (wat zijn de afmetingen van het origineel?)

In the beginning the Internet was a bunch of smart users with dumb terminals. Now...


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 11:46

MBV

Misschien kan je dat scriptje beschikbaar maken via www? of in ieder geval het origineel.

* MBV vindt dit weer een toepasselijk plaatje voor t.net ;)

edit:
Maak eerst een $result aan:
PHP:
1
2
3
4
5
    $picsize     = getimagesize("$img");
    $source_x  = $picsize[0];
    $source_y  = $picsize[1];
    $result       = imagecreatetruecolor($source_y, $source_x);
    $result       = ImageRotate($source, $angle, 0);

en natuurlijk weer weggooien :)

edit:
ter verduidelijking:
Waarschijnlijk maakt imageRotate een result aan met de grootte van het origineel. dit zou dat moeten verhelpen

[ Voor 68% gewijzigd door MBV op 27-05-2003 22:07 ]


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
je hebt gelijk wat grootte van het origineel betreft; maar het probleem blijft bestaan...
Dus ook met jouw code blijft hetzelfde eindresultaat bestaan.

Het lijkt wel of de eerste $result volledig genegeerd wordt.

Helaas kan ik het niet 123 beschikbaar maken op internet; mijn linux server draait nog GD 2.0. Dit is ff testen op mijn XP machine...

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 11:46

MBV

en als je in de eerste $ result handmatig grotere waardes invoert, wat gebeurt er dan? daarmee kan je het testen. Misschien heb ik source_x en y wel 2x omgedraaid :)

Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
ik gebruik een script wat ik ooit is gekregen heb, probeer dat is :)

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
function rotate($src_img, $degrees) {
    $degrees %= 360;

    if ($degrees == 0) {
        $dst_img = $src_img;
    }
    elseif ($degrees == 180) {
        $dst_img = imagerotate($src_img, $degrees, 0);
    }
    else {
        $width = imagesx($src_img);
        $height = imagesy($src_img);

        if ($width > $height) {
            $size = $width;
        }   
        else {
            $size = $height;
        }

        $dst_img = imagecreatetruecolor($size, $size);
        imagecopy($dst_img, $src_img, 0, 0, 0, 0, $width, $height);
        $dst_img = imagerotate($dst_img, $degrees, 0);
        $src_img = $dst_img;
        $dst_img = imagecreatetruecolor($height, $width);

        if ((($degrees == 90) && ($width > $height)) || (($degrees == 270) && ($width < $height))) {
            imagecopy($dst_img, $src_img, 0, 0, 0, 0, $size, $size);
        }

        if ((($degrees == 270) && ($width > $height)) || (($degrees == 90) && ($width < $height))) {
            imagecopy($dst_img, $src_img, 0, 0, $size - $height, $size - $width, $size, $size);
        }
    }

    return $dst_img;
}

[ Voor 3% gewijzigd door twiekert op 27-05-2003 23:46 ]


Verwijderd

Hmm, ik heb hetzelfde probleem, welke ook met bovenstaande functie niet is opgelost. De functie geeft meerdere foutmeldingen. Ten eerste leverde

PHP:
1
2
$width = imagesx($src_img);
$height = imagesy($src_img);

wat problemen op. Nadat ik dat opgelost heb met getimagesize(), geeft hij een melding op

PHP:
1
imagecopy($dst_img, $src_img, 0, 0, 0, 0, $width, $height);

Warning: imagecopy(): supplied argument is not a valid Image resource

Daar kom ik niet uit. Raar ook dat er zo weinig over te vinden is. Zelfs op php.net wordt er niet over gesproken

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
hmm vreemd. ik heb hier apache 2.0.44 draaien + php 4.3.2 met de bijgeleverde gd en geen problemen hier :?

volgende week upgraden naar 4.0.46 + php 4.3.3 + mysql 4.0.14. zal hopelijk geen problemen geven ...
Pagina: 1