Avatar billede still Nybegynder
01. september 2005 - 08:53 Der er 31 kommentarer og
1 løsning

Vandmærke af billede.

Hej, jeg har et script der uploade et billede til servern også ville jeg skrive det sammen med et vandmærke script, men det kan jeg ikke få til at virke, da jeg ikke er den store php haj.
De 2 scripts kan ses nedeunder

upload script:

<?php
   
include('includes/config.php');

include('allows.php');
// Name of the uploaded file
if($image != "")
{
// Random 25 chars+nums . . .
$your_25_digit_code = substr(md5(rand(0,9999)), 17, 25);
// Get the file apart by ., so the 25 chars can be added before the extension
$temp_arr = explode(".", $image_name);
// Default it
$original_name = '';
// Make sure the file isn't something like
// image.something.whatever.hi.hello.what.s.up.png
// Minus 2 because it would come out to
// (file_name).(random_chars).(extension),
// with this it comes out to (file_name)(random_chars).(extension)
for ($x = 0; $x < count($temp_arr)-2; $x++) {
  // Add to it
  $original_name .= $temp_arr[$x] . '.';
}
// The new file name
$new_file = $original_name . $temp_arr[$x] . $your_25_digit_code . '.' . $temp_arr[$x+1];


$destination = "./Images//" . $new_file;
move_uploaded_file($_FILES['image']['tmp_name'],$destination);
}


$old_file = "Images/" . $image_name;
$newb_file = "Images/" . $new_file;

rename($old_file,$newb_file);
chmod("$newb_file", 777);

?>
_________________________________________________________________
Vandmærke script:
<?php

// Load function
require("./phpWatermark.inc.php");

// Instantiate phpWatermark
// The only parameter currently required is the name
// of the image, which should get marked
$wm = new watermark("/path/to/image.png");

// Optionally specify the position of
// the watermark on the image
$wm->setPosition("RND");

// Optionally specify a fixed color for the text
$wm->setFixedColor("#FF00FF");
// or
$wm->setFixedColor(array(255, 0, 255));

// Add a watermark containing the string
// "phpWatermark" to the image specified above
$wm->addWatermark("phpWatermark", "TEXT");

// Fetch the marked image
$im = $wm->getMarkedImage();

// Output
header("Content-type: image/png");
imagepng($im);

?>

Mvh,
Avatar billede dmdisco Nybegynder
01. september 2005 - 09:10 #1
$wm = new watermark("$newb_file");
virker det ikke?
Avatar billede jakobdo Ekspert
01. september 2005 - 09:17 #2
Vil du putte watermark på on-fly altså når billedet vises, eller skal det puttes for forevigt når det uploades?
Avatar billede still Nybegynder
01. september 2005 - 09:21 #3
Det skulle helst puttes på ved upload...
Er det så ikke efter // The new file name // jeg skal sætte det ind?
Avatar billede jakobdo Ekspert
01. september 2005 - 09:36 #4
Jo, efter linien:
$new_file = $original_name . $temp_arr[$x] . $your_25_digit_code . '.' . $temp_arr[$x+1];

Så tager du $new_file og smider i din vandmærke script som dmdisco forslår.
Avatar billede still Nybegynder
01. september 2005 - 09:47 #5
Nu fik jeg den her: Your current PHP setup does not support images
Ved godt hvad det betyder, men hvad kan jeg gøre ved det?
Er det fordi jeg har lavet koks i scriptet?
Avatar billede jakobdo Ekspert
01. september 2005 - 09:51 #6
Har du ikke GDLib installeret?
<?
phpinfo();
?>

Søg efter GDLib
Avatar billede still Nybegynder
01. september 2005 - 10:18 #7
Det tror jeg:  http://www.osob.dk/test.php
Avatar billede jakobdo Ekspert
01. september 2005 - 10:20 #8
Hvilket billede forsøger du at lave vandmærke på?
Avatar billede still Nybegynder
01. september 2005 - 10:23 #9
Et jpg billede hvis det er det du mener.
Avatar billede still Nybegynder
01. september 2005 - 10:29 #10
Nu ser det hele sådan ud:
Hvad gør jeg galt?

<?php

// Load function til vandmærkning
require("./phpWatermark.inc.php");
   
include('includes/config.php');

include('allows.php');
// Name of the uploaded file
if($image != "")
{
// Random 25 chars+nums . . .
$your_25_digit_code = substr(md5(rand(0,9999)), 17, 25);
// Get the file apart by ., so the 25 chars can be added before the extension
$temp_arr = explode(".", $image_name);
// Default it
$original_name = '';
// Make sure the file isn't something like
// image.something.whatever.hi.hello.what.s.up.png
// Minus 2 because it would come out to
// (file_name).(random_chars).(extension),
// with this it comes out to (file_name)(random_chars).(extension)
for ($x = 0; $x < count($temp_arr)-2; $x++) {
  // Add to it
  $original_name .= $temp_arr[$x] . '.';
}
// The new file name
$new_file = $original_name . $temp_arr[$x] . $your_25_digit_code . '.' . $temp_arr[$x+1];

// Vandmærkning
$wm = new watermark("$newb_file");
// Optionally specify the position of
// the watermark on the image
$wm->setPosition("RND");

// Optionally specify a fixed color for the text
$wm->setFixedColor("#FF00FF");
// or
$wm->setFixedColor(array(255, 0, 255));

// Add a watermark containing the string
// "phpWatermark" to the image specified above
$wm->addWatermark("phpWatermark", "TEXT");

// Fetch the marked image
$im = $wm->getMarkedImage();

// Output
header("Content-type: image/png");
imagepng($im);



$destination = "./Images//" . $new_file;
move_uploaded_file($_FILES['image']['tmp_name'],$destination);
}


$old_file = "Images/" . $image_name;
$newb_file = "Images/" . $new_file;

rename($old_file,$newb_file);
chmod("$newb_file", 777);

?>
Avatar billede jakobdo Ekspert
01. september 2005 - 10:35 #11
Jeg har selv brugt denne kode til at lave et watermark on-the-fly:
<?php
$imgSrc = "./upload/" . strip_tags($_GET['src']);

$watermark = imagecreatefrompng("watermark.png");
 
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);

$image = imagecreatetruecolor($watermark_width, $watermark_height);

list($width, $height, $type, $attr) = getimagesize($imgSrc);
switch($type)
{
    case 1:
        header("content-type: image/gif");
        $image = imagecreatefromgif($imgSrc);
        break;
    case 2:
        header("content-type: image/jpeg");
        $image = imagecreatefromjpeg($imgSrc);
        break;
}

if($watermark_width > $width || $watermark_height > $height)
{
    $dstim = imagecreatetruecolor(30, 10);
    imagecopyresampled( $dstim, $watermark, 0, 0, 0, 0, 30, 10, $watermark_width, $watermark_height );
    $dest_x = $width - 35;
    $dest_y = $height - 15;

    imagecopymerge($image, $dstim, $dest_x, $dest_y, 0, 0, 30, 10, 100);
}
else
{
    $dest_x = $width - $watermark_width - 5;
    $dest_y = $height - $watermark_height - 5;
   
    imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
}

switch($type)
{
    case 1:
        imagegif($image);
        break;
    case 2:
        imagejpeg($image);
        break;
}

imagedestroy($image);
imagedestroy($watermark);
?>

Du kan rette det så det blive statik.
Avatar billede jakobdo Ekspert
01. september 2005 - 10:43 #12
Prøv at ret:
// Output
header("Content-type: image/png");
imagepng($im);

til:
// Output
imagejpeg($im,$new_file);
Avatar billede still Nybegynder
01. september 2005 - 10:51 #13
Stadig den samme fejl.
Fandt dette i include filen:
Det tyde lidt på jeg ikke har GDLib installeret, hvordan finde jeg precist ud af det?

// Public Watermark
    // You need to specify either a filename or an image resource
    // when instatiating phpWatermark
    function Watermark($res) {
        list($this->type, $this->image) = $this->_getImage($res);

        if (!$this->image) {
            $this->_die_error("Your current PHP setup does not support ". $this->type ." images");
        }
   
        $this->width = imagesx($this->image);
        $this->height = imagesy($this->image);

        $gdinfo = gd_info();
        if (preg_match('/(\d)\.\d/', $gdinfo["GD Version"], $gdinfo))
            $this->gd_version = $gdinfo[1];
        else
            $this->gd_version = 0;
        unset($gdinfo);
    }
__________________________________________________________________________________
Avatar billede jakobdo Ekspert
01. september 2005 - 10:53 #14
Jeg tror nu mere det er det billede du forsøger at sætte vandmærke på som ikke virker.
Avatar billede still Nybegynder
01. september 2005 - 11:01 #15
Prøvet at konveter en jpg til png og uploade den, men nu er det mit upload script der ikke vil: Filformat ikke tiladt selv jeg sikker på den er....
Avatar billede jakobdo Ekspert
01. september 2005 - 11:06 #16
Prøv at smid dit upload script herind!
Så må vi se hvad vi kan gøre ved det!
Avatar billede still Nybegynder
01. september 2005 - 11:11 #17
Er det kun .png filer der kan mærkes?
Dette her er min config fil:
<?php
   
    /*  Where you'd like pictures to save  */
    $address = "http://www.osob.dk/Images/";
   
    /*  Leave this for all m4tt3r links on the site */
    $m4tt3r = "http://www.osob.dk";       
           
    /*  Change xxxx.xxx to your site for the Image hosted by. */
    $yoursite = "http://www.osob.dk";
     
    /*  This is used for the header.php section of the site.  */
    $sitename = "Osob.dk";
   
   
    /*  Maximum Width of the picture  */
    $maxwidth = 1024;     
   
    /*  Maximum Height of picture  */
    $maxheight = 768;    
   
    /*  Max File size of picture : default 500kb = 1/2 MB  */
    $max_filesize = 500000;   
   
   
    /*  Upload IMAGE command ***DO NOT Edit***  */
    $uploads = 'Images';   
   
       
    /***************************************************/
    /*  File types/Extensions you allow for upload    */
    /*  NOTE: DO NOT!!! touch the 'pjpeg', it's so    */
    /*  Firefox will work with this script.          */
    /***************************************************/
            $types_array = array('image/gif','image/jpeg','image/pjpeg','image/jpg','image/png','image/bmp','image/tiff');
         
         
?>
Avatar billede jakobdo Ekspert
01. september 2005 - 11:12 #18
Jeg tror den kan tage alle filer.
Avatar billede still Nybegynder
01. september 2005 - 11:13 #19
Også lige allows.php:

<left>| <a class="toplinks" href="/index.php"> TILBAGE </a>
<?php

/**********************************/
/*        DO NOT TOUCH !!!        */
/*        No relevant data        */
/**********************************/


    include('includes/config.php');

if($_POST['upload'])
{

if($_FILES['image']['name'] == "")
{
    echo "<font color=red>Vælg venligst et billede!\n </font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}

if(!in_array($_FILES['image']['type'], $types_array))
{
    echo "<font color=blue>Den filtype er ikke tiladt!\n </font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}

    $max_filesize_kb = ($max_filesize / 1024);

if($_FILES['image']['size'] > $max_filesize)
{
    echo "<font color=blue>Dit billede overskrider grænsen på </font>".$max_filesize_kb."<font color=blue> kb\n </font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}

    $imagesize = getimagesize($_FILES['image']['tmp_name']);

    $imagewidth = $imagesize[0];
    $imageheight = $imagesize[1];

if($imagewidth > $maxwidth || $imageheight > $maxheight)
{
    echo "<font color=blue>Dit billede er for stort,billedet må være op til </font>".$maxwidth."<font color=blue> x </font>".$maxheight."<font color=blue> size\n</font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}
move_uploaded_file($_FILES['image']['tmp_name'], $uploads.'/'.$_FILES['image']['name'])
or die ("Couldn't upload ".$_FILES['image']['name']."\n");
}

?>
</center>
Avatar billede jakobdo Ekspert
01. september 2005 - 11:30 #20
Hvad siger du til dette:

<left>| <a class="toplinks" href="/index.php"> TILBAGE </a>
<?php

/**********************************/
/*        DO NOT TOUCH !!!        */
/*        No relevant data        */
/**********************************/


    include('includes/config.php');

if($_POST['upload'])
{

if($_FILES['image']['name'] == "")
{
    echo "<font color=red>Vælg venligst et billede!\n </font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}

if(!in_array($_FILES['image']['type'], $types_array))
{
    echo "<font color=blue>Den filtype er ikke tiladt!\n </font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}

    $max_filesize_kb = ($max_filesize / 1024);

if($_FILES['image']['size'] > $max_filesize)
{
    echo "<font color=blue>Dit billede overskrider grænsen på </font>".$max_filesize_kb."<font color=blue> kb\n </font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}

    $imagesize = getimagesize($_FILES['image']['tmp_name']);

    $imagewidth = $imagesize[0];
    $imageheight = $imagesize[1];

if($imagewidth > $maxwidth || $imageheight > $maxheight)
{
    echo "<font color=blue>Dit billede er for stort,billedet må være op til </font>".$maxwidth."<font color=blue> x </font>".$maxheight."<font color=blue> size\n</font>";
        include ('form.php');
    for ($i=1; $i<=19; $i++) { echo "<br />";}
    include ('footer.php');
    exit;
}
move_uploaded_file($_FILES['image']['tmp_name'], $uploads.'/'.$_FILES['image']['name'])
or die ("Couldn't upload ".$_FILES['image']['name']."\n");
}

$imgSrc = $uploads.'/'.$_FILES['image']['name'];

$watermark = imagecreatefrompng("watermark.png");

$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);

$image = imagecreatetruecolor($watermark_width, $watermark_height);

list($width, $height, $type, $attr) = getimagesize($imgSrc);
switch($type)
{
    case 1:
        header("content-type: image/gif");
        $image = imagecreatefromgif($imgSrc);
        break;
    case 2:
        header("content-type: image/jpeg");
        $image = imagecreatefromjpeg($imgSrc);
        break;
}

if($watermark_width > $width || $watermark_height > $height)
{
    $dstim = imagecreatetruecolor(30, 10);
    imagecopyresampled( $dstim, $watermark, 0, 0, 0, 0, 30, 10, $watermark_width, $watermark_height );
    $dest_x = $width - 35;
    $dest_y = $height - 15;

    imagecopymerge($image, $dstim, $dest_x, $dest_y, 0, 0, 30, 10, 100);
}
else
{
    $dest_x = $width - $watermark_width - 5;
    $dest_y = $height - $watermark_height - 5;
 
    imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
}

switch($type)
{
    case 1:
        imagegif($image,$imgSrc);
        break;
    case 2:
        imagejpeg($image,$imgSrc);
        break;
}

imagedestroy($image);
imagedestroy($watermark);

?>
</center>
Avatar billede still Nybegynder
01. september 2005 - 11:36 #21
Så er der fest fyverkeri:
Den der watermark.png den ikke kan finde er det, det nye billede?

Warning: imagecreatefrompng(watermark.png): failed to open stream: No such file or directory in /home/www/web1/html/allows.php on line 63

Warning: imagesx(): supplied argument is not a valid Image resource in /home/www/web1/html/allows.php on line 65

Warning: imagesy(): supplied argument is not a valid Image resource in /home/www/web1/html/allows.php on line 66

Warning: imagecreatetruecolor(): Invalid image dimensions in /home/www/web1/html/allows.php on line 68

Warning: Cannot modify header information - headers already sent by (output started at /home/www/web1/html/allows.php:2) in /home/www/web1/html/allows.php on line 78

Warning: imagecopymerge(): supplied argument is not a valid Image resource in /home/www/web1/html/allows.php on line 97

Warning: imagedestroy(): supplied argument is not a valid Image resource in /home/www/web1/html/allows.php on line 111

Your current PHP setup does not support images
Avatar billede jakobdo Ekspert
01. september 2005 - 11:43 #22
watermark.png er det vandmærke du ønsker på dine pics!
Avatar billede still Nybegynder
01. september 2005 - 12:16 #23
Troede den printet teksten på...
Er ved at blive gak i hovedet af det script...
Okay, nu har jeg lavet et vandmærke billede også er den her fejl:

Warning: Cannot modify header information - headers already sent by (output started at /home/www/web1/html/allows.php:2) in /home/www/web1/html/allows.php on line 78

Your current PHP setup does not support images
Avatar billede jakobdo Ekspert
01. september 2005 - 12:23 #24
Crap...
Jeg er også ved at være gak... (og var nok allerede inden jeg startede på den tråd her)
Prøv at ret:

switch($type)
{
    case 1:
        header("content-type: image/gif");
        $image = imagecreatefromgif($imgSrc);
        break;
    case 2:
        header("content-type: image/jpeg");
        $image = imagecreatefromjpeg($imgSrc);
        break;
}
til:
switch($type)
{
    case 1:
        $image = imagecreatefromgif($imgSrc);
        break;
    case 2:
        $image = imagecreatefromjpeg($imgSrc);
        break;
}
Avatar billede still Nybegynder
01. september 2005 - 12:34 #25
Så er vi tilbage hvor vi startede; hvis det er jpg:Your current PHP setup does not support images
og png:Den filtype er ikke tiladt!
Avatar billede jakobdo Ekspert
01. september 2005 - 12:38 #26
Der er sgu da weird!
jeg prøver lige at lave en test til dig, men du får den senere...
Prøv evt at rod lidt videre selv.
Avatar billede still Nybegynder
01. september 2005 - 12:39 #27
Okay
Avatar billede jakobdo Ekspert
01. september 2005 - 16:17 #28
Avatar billede still Nybegynder
01. september 2005 - 17:13 #29
Jeg prøver lige at lege lidt med det...
Tusind tak for hjælpen,
Smid et svar..
Avatar billede jakobdo Ekspert
01. september 2005 - 17:16 #30
Svar!
Avatar billede gertnissen Nybegynder
03. september 2005 - 13:10 #31
Tjek for GDlib
$info=gd_info();
$version=$info['GD Version'];
echo 'GD '.$version.' installed';

Eller phpinfo();
Avatar billede jakobdo Ekspert
04. september 2005 - 15:06 #32
Takker for point!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester