imagerotate via Ajax realisieren

pnrooob

Grünschnabel
Hi,

ich sitze derzeit an folgendem Problem:

Ich lade per Ajax-Upload Bilder in einem Temp-Ordner meines Servers und lasse diese mit Hilfe von jQuery direkt als Thumbnail anzeigen.

Nun habe ich - da es ab und zu vor kommen kann, dass die Bilder auf der Seite liegen (Handyaufnahmen) - über jedes Miniaturbild drei kleine Icons gelegt:

nach links drehen
nach rechts drehen
löschen

Das Löschen funktioniert einwandfrei. Nur beim Drehen will es einfach nicht...

GD ist installiert und verfügbar.

Folgende Snippets/Dateien benutze ich...

Hauptsseite:
Code:
$(document).on('click', '.rotateL', function() {

            $box = $(this).closest('div');
            
            var txt = $box.attr('name');
            var img = $('#picNames input[title="' + txt + '"]').val();

            var $response = null;
            $.ajax({
                type: 'POST',
                async: false,
                url: 'files/account/rotateimg.php',
                data: 'img=' + img + '&d=l',
                success: function(text)
                {
                    $response = $(text);
                }
            });

            if ($response == null) {
                alert("Das hat leider nicht funktioniert.");
            } else {
                $box.find('img.thumb').fadeOut('fast').remove();

                $box.append($response);
            }
        });

rotateimg.php:
PHP:
<?php

error_reporting(0);
ob_start();
session_start();

header('Content-type: image/jpeg');

$srcImg = "../../uploads/images/temp/" . $_POST['img'];
$source = imagecreatefromjpeg($srcImg);

$direction = $_POST['d'];

if ($direction === 'r') {
    $angle = 90;
} else if ($direction === 'l') {
    $angle = -90;
}

?>
<img src="<?php imagerotate($source, $angle, 0, 0); ?>" class="thumb">
<?php
if (!function_exists('imagerotate')) {

    /*
        Imagerotate replacement. ignore_transparent is work for png images
        Also, have some standard functions for 90, 180 and 270 degrees.
        Rotation is clockwise
    */

    function imagerotate_rotateX($x, $y, $theta) {
        return $x * cos($theta) - $y * sin($theta);
    }

    function imagerotate_rotateY($x, $y, $theta) {
        return $x * sin($theta) + $y * cos($theta);
    }

    function imagerotate($srcImg, $angle, $bgcolor = 0, $ignore_transparent = 0) {
        $srcw = imagesx($srcImg);
        $srch = imagesy($srcImg);

        //Normalize angle
        $angle %= 360;
        //Set rotate to clockwise
        $angle = -$angle;

        if ($angle == 0) {
            if ($ignore_transparent == 0) {
                imagesavealpha($srcImg, true);
            }
            return $srcImg;
        }

        // Convert the angle to radians
        $theta = deg2rad($angle);

        //Standart case of rotate
        if ((abs($angle) == 90) || (abs($angle) == 270)) {
            $width = $srch;
            $height = $srcw;
            if (($angle == 90) || ($angle == -270)) {
                $minX = 0;
                $maxX = $width;
                $minY = -$height+1;
                $maxY = 1;
            } else if (($angle == -90) || ($angle == 270)) {
                $minX = -$width+1;
                $maxX = 1;
                $minY = 0;
                $maxY = $height;
            }
        } else if (abs($angle) === 180) {
            $width = $srcw;
            $height = $srch;
            $minX = -$width+1;
            $maxX = 1;
            $minY = -$height+1;
            $maxY = 1;
        } else {
            // Calculate the width of the destination image.
            $temp = array(
                imagerotate_rotateX(0, 0, 0 - $theta),
                imagerotate_rotateX($srcw, 0, 0 - $theta),
                imagerotate_rotateX(0, $srch, 0 - $theta),
                imagerotate_rotateX($srcw, $srch, 0 - $theta)
            );
            $minX = floor(min($temp));
            $maxX = ceil(max($temp));
            $width = $maxX - $minX;

            // Calculate the height of the destination image.
            $temp = array(
                imagerotate_rotateY(0, 0, 0 - $theta),
                imagerotate_rotateY($srcw, 0, 0 - $theta),
                imagerotate_rotateY(0, $srch, 0 - $theta),
                imagerotate_rotateY($srcw, $srch, 0 - $theta)
            );
            $minY = floor(min($temp));
            $maxY = ceil(max($temp));
            $height = $maxY - $minY;
        }

        $destimg = imagecreatetruecolor($width, $height);
        if ($ignore_transparent == 0) {
            imagefill($destimg, 0, 0, imagecolorallocatealpha($destimg, 255,255, 255, 127));
            imagesavealpha($destimg, true);
        }

        // sets all pixels in the new image
        for ($x = $minX; $x < $maxX; $x++) {
            for ($y = $minY; $y < $maxY; $y++) {
                // fetch corresponding pixel from the source image
                $srcX = round(imagerotate_rotateX($x, $y, $theta));
                $srcY = round(imagerotate_rotateY($x, $y, $theta));
                if ($srcX >= 0 && $srcX < $srcw && $srcY >= 0 && $srcY < $srch) {
                    $color = imagecolorat($srcImg, $srcX, $srcY);
                } else {
                    $color = $bgcolor;
                }
                imagesetpixel($destimg, $x-$minX, $y-$minY, $color);
            }
        }

        return $destimg;
    }

}
?>

Ich hatte es auch zwischenzeitlich mit einer weiteren Zwischenseite versucht...
PHP:
<?php

error_reporting(0);
ob_start();
session_start();

$img = $_POST['img'];
$d = $_POST['d'];
?>
<img src="files/account/rotateimg.php?img=<?php echo $img; ?>&d=<?php echo $d; ?>" class="thumb">

Hat jemand einen Rat/Tipp?

MfG
pnrooob
 
Zuletzt bearbeitet:
Hat sich erledigt.....

Das Bild wurde korrekt geladen.
Ich habe nur vergessen es wieder einzublenden =)
 
Zurück