Logo auf Bilder drucken!

Hannibal

Erfahrenes Mitglied
Logo auf Bilder drucken! ZugriffsProblem.

Guten Morgen.

Ich habe mit einem Copyright Script angefangen, nun bin ich soweit dass ich ein Copyright auf ein Bild drucken kann, während dieses angezeigt wird.

Also bei meinem Script liegt die Font Datei und das Bild im selben Ordner wie das Script File und das ganze klappt wunderbar.

Doch nun habe ich ein Rechte-Problem, mein UploadScript welches die Bilder erstellt, kopiert diese Bilder in einen Ordner, da haben sie dann CHMOD 600.
Angezeigt werden etc. können die Bilder wunderbar, nur kann leider mein Copyright Script nicht auf die Bilder zugreifen.

Ich habe ein wenig experimentiert und wenn ich die URL im Copyright Script mit http:// mache, dann kann auch mein Script die Bilder bearbeiten, doch ist dies bestimmt nicht die Idee der Funktion. Merk ich an der Ladezeit.

Also hat mir jemand einen Tipp wie ich meine Funktion umschreiben muss oder was ich grundsätzlich ändern muss?

Hier mein Code. (inkl. Link)

PHP:
<?php
$text='www.streetstylez.ch';
$font = "visitor1f";
header( "Content-type: image/jpeg");
$im = imagecreatefromjpeg("image.jpg");
$black = ImageColorAllocate($im, 255, 255, 255);

$size=getimagesize("image.jpg");
$breite=$size[0];
$hoehe=$size[1];
$posX=$breite - 300;
$posY=$hoehe - 10;

imagettftext($im, 20, 0, $posX, $posY, $black, $font, $text);

ImageJpeg($im);
ImageDestroy($im);
?>

Vielen Dank
Hannibal
 
Zuletzt bearbeitet:
PHP:
<?php
function watermark($image, $watermark, $position=5, $transparency=50, $t_x=0, $t_y=0) {
    // Michael Müller, 05.03.2004 17:05, www.php4u.net
    // Positionen:
        // 1 oben links 
        // 2 oben mittig
        // 3 oben rechts
        // 4 Mitte links
        // 5 Mitte
        // 6 Mitte rechts
        // 7 unten links
        // 8 unten mittig
        // 9 unten rechts
    // erlaubt sind png und jpeg
    if($position < 1 || $position > 9)
        return FALSE;
    if(!file_exists($image) || !file_exists($watermark))
        return FALSE;
    $infos_img = getimagesize($image);
    $infos_wat = getimagesize($watermark);
    if(!in_array($infos_img[2], array(2,3)) ||     !in_array($infos_wat[2], array(2,3)))
        return FALSE;
    if($infos_img[0]<$infos_wat[0] || $infos_img[1]<$infos_wat[1])
        return FALSE;
    if($infos_wat[0]<$t_x || $infos_wat[1]<$t_y)
        return FALSE;
    $transparency = 100 - $transparency;
    if($transpareny < 0 || $transpareny > 100)
        return FALSE;
    @unlink($save_as);

    // Position x        
    switch (($position-1)%3) {
        case 0: 
            $pos_x = 0;
            break;
        case 1:
            $pos_x = round(($infos_img[0]-$infos_wat[0])/2, 0);
            break;
        case 2:
            $pos_x = $infos_img[0]-$infos_wat[0];
            break;
    }
    // Position y
    switch (floor(($position-1)/3)) {
        case 0: 
            $pos_y = 0;
            break;
        case 1:
            $pos_y = round(($infos_img[1]-$infos_wat[1])/2, 0);
            break;
        case 2:
            $pos_y = $infos_img[1]-$infos_wat[1];
            break;
    }
    // watermark-procedure
    if($infos_img[2] == 2)
        $img_image = imagecreatefromjpeg($image);
    if($infos_img[2] == 3)
        $img_image = imagecreatefrompng($image);
    if($infos_wat[2] == 2)
        $img_watermark = imagecreatefromjpeg($watermark);
    if($infos_wat[2] == 3)
        $img_watermark = imagecreatefrompng($watermark);
    imagealphablending($img_image, TRUE);
    imagealphablending($img_watermark, TRUE);
    imagecolortransparent($img_watermark, imagecolorat($img_watermark, $t_x, $t_y));
    imagecopymerge($img_image, $img_watermark, $pos_x, $pos_y, 0, 0, $infos_wat[0], $infos_wat[1], $transparency);
    if(strtolower(substr($save_as, -3)) == "png") {
		header("Content-Type: image/png"); 
		imagepng($img_image);
    }
	else {
		header("Content-Type: image/jpeg"); 
		imagejpeg($img_image);
    }
    return FALSE;
}
watermark($_REQUEST['image'], $_REQUEST['watermark'], 9,60);
?>

wird dann mit
PHP:
watermark.php?image=images/<?=$_REQUEST['pic']?>.jpg&watermark=watermark_big.png"
eingebunden

das bild wäre dann bei mir diesses hier
watermark_big.png


und so würds aussehen
watermark.php
 
Hmm Ok sieht auch gut aus, ich werden den Code mal durchgehen, aber in erster Linie hätte ich gerne gewusst wie das mit den Rechten zu Handhaben ist. Kann doch nicht sein dass die Bilder auf Chmod 777 gesetzt werden müssen wenn die Bilder ja gar nicht geändert werden.
 
könnte der ordner sein
wenn du dem ordner selbst keine rechte gegeben hast kannste da auch nichts machen
normal müssen bilder keine rechte haben ausser du überschreibst sie
dann brauchste aber auch nur die rechte für den owner und mehr nicht

also setz mal den ordner auf 666 und es wird gehen :)
 
So ich habe das mal gleich versucht und es sieht wirklich schon etwas besser aus, doch die Rückgabe ist noch immer kein Bild, nun ist es diese Fehlermeldung:

PHP:
<br />
<b>Fatal error</b>:  Allowed memory size of 8388608 bytes exhausted at (null):0 (tried to allocate 6400 bytes) in <b>/srv/www/htdocs/streetstylez/bildcopy.php</b> on line <b>11</b><br />

Nachtrag:

ini_set ("memory_limit", "2M");

Hat Abhilfe gebracht :)
 
Jost hat gesagt.:
Kann mir jemand sagen warum das net tranzparent ist ?
Schaut so aus, als hättest du dein Watermark PNG ohne Transparenz abgespeichert, bzw ohne Transparente Bereiche erstellt oder aber eine PHP Funktion genutzt, die die Transparenz killt.
 
so .. ich hab das nochmal mit nem anderen Script gemacht:
http://www.indict.de/water/logo.php?bild=test.jpg&logo=logo.png&pos=0
so sieht das jetzt richtig aus.. aber.. ersten gefällt mir die lange adresse natürlich nicht.. zweitens wenn ich auf "speichern unter" gehe .. steht da "logo.jpg".. wie peinlich.. kann mann das nicht machen das man am ende des scriptes nochmal das generierte bild kopiert und daraus dann zum beispiel ein "56.jpg" macht ?

Hier das script:
<?
header("Content-Type: image/jpeg");
$image2=imagecreatefromjpeg($bild);
$image1=imagecreatefrompng($logo);
$breite=imagesx($image2);
$hoehe=imagesy($image2);
$breite1=imagesx($image1);
$hoehe1=imagesy($image1);
if ($pos=="r") {$pos=rand(0,8);}
if ($pos==0) {
imagecopy ($image2,$image1,0,0,0,0,$breite1,$hoehe1);
}
if ($pos==1) {
imagecopy ($image2,$image1,($breite-$breite1)/2,0,0,0,$breite1,$hoehe1);
}
if ($pos==2) {
imagecopy ($image2,$image1,$breite-$breite1,0,0,0,$breite1,$hoehe1);
}
if ($pos==3) {
imagecopy ($image2,$image1,0,($hoehe-$hoehe1)/2,0,0,$breite1,$hoehe1);
}
if ($pos==4) {
imagecopy ($image2,$image1,($breite-$breite1)/2,($hoehe-$hoehe1)/2,0,0,$breite1,$hoehe1);
}
if ($pos==5) {
imagecopy ($image2,$image1,$breite-$breite1,($hoehe-$hoehe1)/2,0,0,$breite1,$hoehe1);
}
if ($pos==6) {
imagecopy ($image2,$image1,0,$hoehe-$hoehe1,0,0,$breite1,$hoehe1);
}
if ($pos==7) {
imagecopy ($image2,$image1,($breite-$breite1)/2,$hoehe-$hoehe1,0,0,$breite1,$hoehe1);
}
if ($pos==8) {
imagecopy ($image2,$image1,$breite-$breite1,$hoehe-$hoehe1,0,0,$breite1,$hoehe1);
}
imagejpeg($image2,"",100);
?>
 
Zurück