Anzeige:
Ergebnis 1 bis 7 von 7

Thema: GDI, imagerotate und Bildgröße

  1. #1
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    GDI, imagerotate und Bildgröße

    Hallo Leute,

    bei imagerotate scheint die Bildgröße an das gedrehte Bild angepasst zu sein. Frage: wie? Werden transparente Ecken weggeschnitten? Wie wird erweitert?

    Code:
    Code:
    // Drehen um 120Grad
    $ima2=imagerotate($ima1,$dreh,0); // ima1 um Mitte gedreht!
    $anz=imagecopy($ima2,$ima1, $size/2,0, 0,0,$size,2*$size); // dann nochmal draufgepappt
    Es wäre gut, die Dimensionen des neuen Bildes $ima2 zu wissen, getimagesize ist hier nicht sehr hilfreich.

    so long,
    uja
    Eigentlich ganz einfach, wenn man's weiss!

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Das ist Abhängig vom Bildtype.
    Die Normale Variante ist diese.
    PHP-Code:
    ##
    $bild "./test.png";

    $imadata=getimagesize($bild);
    // var_dump( "<pre>", $imadata, "</pre>" );

    $ima0  imagecreatefrompng($bild);
    // Setze Hindergundfarbe
    $weiss imagecolorallocate($ima0255255255);
    // Drehe
    $fertig  imagerotate($ima045$weiss0);
    // Lösche Hindergundfarbe
    imagecolordeallocate($fertig,$weiss);
    // Entmüllen
    imagedestroy($ima0);

    if (
    headers_sent())
      exit(
    0);

    header "Content-Type: image/png;" );
    imagepng($fertig);
    imagedestroy($fertig); 
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Hm, das beantwortet leider nicht die aktuelle Frage.

    Also: es existiert ein $ima0 mit $breite0 und $hoehe0. Dieses wird um 30Grad gedreht und ergibt dabei $ima1. Dass sich $ima1 zickig mit dem Hintergrund anstellt, steht erstmal hintenan. (php 4.5)

    Obendrein erweitert es sich passend(?) zum Drehwinkel. Leider habe ich manchmal einen schmalen Rand, manchmal einen breiteren. Dann sind im transparenten Bereich feine Haarlinien zu sehen, die Ränder des Ursprungbildes, denselben Mist, den mir Gimp beim Setzen der Transparenz oft liefert, und der beim Drehen dann auffällt, wenn er vorher nicht mit frisch Befüllen und Fill-Toleranz=35% verhindert wird.
    Diese Streifen sind aber hier nebensächlich, da das Bild noch weiter bearbeitet werden soll.

    $ima0 soll jetzt nochmal so darauf gepappt werden, dass es genau in der Mitte ist.

    Bisherige Lösung:
    $ima1 wird abgespeichert und die Dimensionen anschließend mit getimagesize ausgelesen.

    Von dieser Lösung will ich runter, es sollte nicht auf die Platte zugegriffen werden.
    Eigentlich ganz einfach, wenn man's weiss!

  4. #4
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Langsam habe ich den Eindruck, dass mich die GDI (2.0.28-kompatibel) in punkto Bildgröße veräppelt. Ein ursprünglich 96 Pixel breiter Bereich wird mir nach 3 Transformationen auf ca.78px heuntergekürzt, dafür werde ich bei jeder Aktion mit einem netten Rand beglückt, bei der letzten um je 8px.

    Ich glaube, ich sollte meinem Provider mal vorschlagen, upzudaten.
    Eigentlich ganz einfach, wenn man's weiss!

  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ehrlich gesagt habe ich nur einmal richtig mit gd gearbeitet. Bin dann ganz schnell auf ImageMagick um gestiegen. Das kann wesentlich mehr, aber mit dem Nachteil das man system() Befehle absetzen muß.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  6. #6
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Mit dem Update habe ich zum erstemal gesehen, wie das Bild zum Schluss aussehen sollte, aber nur 1x.
    Beim 2.Bild gab es einen php-Speicherüberlauf (imagecopyresample), und um keine rote Karte vom Admin zu bekommen, wurde das Projekt erstmal begraben.
    Eigentlich ganz einfach, wenn man's weiss!

  7. #7
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    so, das Projekt ging doch noch weiter.

    Was ich gesucht hatte, waren

    Code:
    $breite=ImageSX($ima0);
      $hoehe=ImageSX($ima0);
    Dass rotate einige Eigenmächtigkeiten beim Resize durchführt, war bekannt.
    So wurde ein eigenes "rotate" geschrieben, was nach einigen Pixelfehlerkorrekturen akzeptable Bilder liefert.
    Geändert von BlueJay (01-03-2010 um 06:52 Uhr) Grund: nun geht's auch bei php4
    Eigentlich ganz einfach, wenn man's weiss!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •