Avatar billede lsskaarup Nybegynder
07. december 2004 - 00:31 Der er 45 kommentarer og
1 løsning

Tekst/vandmærke oven på billede

Jeg skal lige bruge lidt hjælp til, at få udvidet min billedeupload, så den også kan lægge en tekst, gerne lidt gennemsigtig, ovenpå billedet.

Koden som jeg kan have det ind i er:

if(tjektype($_FILES['tilbudsBillede']['type'] == "image/pjpeg")) {
                            $sourceImage = imagecreatefromjpeg($thumbnail_dir);
                            imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                            if ($type == ".jpeg") {
                                imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpeg")."_thumb.jpeg");
                                $thumbnail = $thumbnail_dir.basename($billede, ".jpeg")."_thumb.jpeg";// Stien til thumbnail
                            } else {
                                imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpg")."_thumb.jpg");
                                $thumbnail = $thumbnail_dir.basename($billede, ".jpg")."_thumb.jpg";// Stien til thumbnail
                            }
                        }

Jeg regner med at det er imagettftext, som jeg skal bruge, men jeg kan ikke helt få den til ar virke efter hensigten.
Avatar billede lsskaarup Nybegynder
07. december 2004 - 00:37 #1
Jeg glemte at sige, at jeg som udgangspunkt, gerne vil have effekten på begge billeder jeg laver.
Avatar billede coderdk Praktikant
07. december 2004 - 02:46 #2
Lav et PNG-billede med transparens, og følg så opskriften fra dette spm:

  http://www.eksperten.dk/spm/566347

:)
Avatar billede lsskaarup Nybegynder
10. december 2004 - 17:00 #3
Hmm, kan ikke helt få den til at virke.

Overlagsbilledet bliver ikke gennemsigtigt, selvom det originalt er det. Se selv på henholdvis.

Resultat: http://www.larsskaarup.dk/randerssport/test.php
Billede (overlag): http://www.larsskaarup.dk/randerssport/uploads/gennemsigtig-randers-sport.png - Det er dog svært at se i IE, da meningen at den skal være gennemsigtigt samt teksten hvid, men det er der.
Avatar billede lsskaarup Nybegynder
10. december 2004 - 17:36 #4
Overlagsbilledet bliver simpelthen ikke gennemsigtigt, selvom originalen er gennemsigtig.
Avatar billede lsskaarup Nybegynder
10. december 2004 - 17:41 #5
coderdk -> jeg kan se du i den andet spørgsmål, skriver at imagecopy også virker til nye billeder, så det vil vel sige, at det er den funktion jeg skal bruge, når jeg skal have sat dette ind i mit upload-script?
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:08 #6
Hallo, coderdk er du der?
Avatar billede coderdk Praktikant
14. december 2004 - 16:11 #7
Ah sorry :) Havde lige glemt at kigge på denne ;) Hold on!
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:17 #8
Fino, jeg var ellers lige ved at blive nervøs for om du var gået på juleferie, ikke er den ikke vil være fortjent ;-)
Avatar billede coderdk Praktikant
14. december 2004 - 16:18 #9
Ja, fremgangsmåden må være:

  $pic = "billede.jpg";
  $overlay = "gennemsigtig-randers-sport.png"
  $nytpic = "testpic.jpg";
  $thepic = imagecreatefromjpeg($pic);
  imagealphablending($thepic, true);
  $theoverlay = imagecreatefrompng($overlay);
  $imgX = imagesx($theoverlay);
  $imgY = imagesy($theoverlay);
  imagecopy($thepic, $theoverlay, 10, 10, 0, 0, $imgX, $imgY);
  imagejpeg($theimg, $nytpic, 100);
  imagedestroy($thepic);
  imagedestroy($theoverlay);

;) virker det ikke?
Avatar billede coderdk Praktikant
14. december 2004 - 16:19 #10
Så skulle det nye billede altså hedde testpic.jpg
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:22 #11
Du får lige min kode, det vil jo nok gøre det bare lidt nemmere for dig.

<?php
$sti_ImgBack = "uploads/adidas-sportssokker-lille.jpg";
$sti_ImgIcon = "uploads/gennemsigtig-randers-sport.png";
   
$imgBack = imagecreatefromjpeg($sti_ImgBack);
ImageAlphaBlending($imgBack, true);
$imgIcon = imagecreatefrompng($sti_ImgIcon);

//Finder bredde og højde på billedet
$imgX = imagesx($imgIcon);
$imgY = imagesy($imgIcon);
ImageCopy($imgBack, $imgIcon, 10, 10, 0, 0, $imgX, $imgY);

imagejpeg($imgBack, $sti_ImgBack, 100);
imagedestroy($imgBack);
imagedestroy($imgIcon);

//IconizeImage($pic, $map);
?>
<table border="1"><tr><td><img src=<?=$sti_ImgBack?>></td></tr></table>

Den sidste linie, som jeg har udkommenteret, kan jeg ikke helt se hvorfor den skal være der. Kalder den ikke bare sig selv, med det samme parametre?
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:24 #12
Det er imponerende, hvor gode folk er til at krydse hinandens kommentarer herinde ;-) Nå jeg tjekker lige dit forslag.
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:27 #13
Øh, skulle linien

imagejpeg($theimg, $nytpic, 100);

ikke hvad været

imagejpeg($thepic, $nytpic, 100);
Avatar billede coderdk Praktikant
14. december 2004 - 16:28 #14
hehe nemlig! :)
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:34 #15
Den eneste forskel der er i vores koder, er at du bruger et andet navn, men dette billede skal det ikke ligge på serveren først, for jeg få fejlen:
Warning: imagejpeg: unable to open 'test.jpg' for writing in /usr/www/larsskaarup_dk/public_html/randerssport/test.php on line 23
<-- linien hvor jeg laver det nye sammenkoblede billede -->

når jeg prøver at køre testside.
Avatar billede coderdk Praktikant
14. december 2004 - 16:35 #16
Hmm men du får lov til at overskrive en eksisterende?
Avatar billede coderdk Praktikant
14. december 2004 - 16:37 #17
Prøv lige for sjovt dette:

<?php

  header( "Content-Type: image/jpeg" );

  $pic = "billede.jpg";
  $overlay = "gennemsigtig-randers-sport.png"
  $thepic = imagecreatefromjpeg($pic);
  imagealphablending($thepic, true);
  $theoverlay = imagecreatefrompng($overlay);
  $imgX = imagesx($theoverlay);
  $imgY = imagesy($theoverlay);
  imagecopy($thepic, $theoverlay, 10, 10, 0, 0, $imgX, $imgY);
  imagejpeg($thepic, '', 100);
  imagedestroy($thepic);
  imagedestroy($theoverlay);

?>

Hvis du kalder dette script, skulle den gerne outputte et billede til din browser, med et overlayet billede på!
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:39 #18
Jeg har sådan set ikke problemer med at få den til at lave et overlay på et billede, men problemet er at overlayet ikke bliver gennemsigtigt, selvom det i originalen er det.
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:45 #19
Jeg lagde nu et filfældigt billede op med navnet test.png, og chmod'ede det til 666, så kunne jeg få lov til at overskrive det, men overlayeret er stadig ikke gennemsigtigt.
Avatar billede coderdk Praktikant
14. december 2004 - 16:47 #20
Er din PNG 24-bit? Hvis ikke den er, så prøv at lave den til 24bit...
Avatar billede coderdk Praktikant
14. december 2004 - 16:51 #21
Hmm jeg prøvede lige mit sidste script på min egen server, resultatet:

  http://examples.coder.dk/test-transp.jpg

Det ser ud til at virke her... Gad vide hvad der så kan være galt ;)
Avatar billede coderdk Praktikant
14. december 2004 - 16:52 #22
(Det er så med dit oprindelige PNG-billede)
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:52 #23
Det hjalp intet, men 8-bits ong, skulle da også kunne være transparente
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:53 #24
Ups, ong -> png
Avatar billede coderdk Praktikant
14. december 2004 - 16:54 #25
Meget underligt ;)
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:54 #26
Ja, det ser jo ud til at fungere godt nok hos dig, alle de har funktioner kræver de en speciel udgave af et eller andet, for at køre optimalt?
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:57 #27
Ahhh, jeg kan se at ImageAlphaBlending minimum kræver GD 2.0.1, og i min phpinfo-fil kan jeg kun få se at jeg kører med GD 2.0 eller højere, så jeg må nok lige prøve at kontakte min udbyder for at høre, hvilken version der er på min.
Avatar billede lsskaarup Nybegynder
14. december 2004 - 16:59 #28
Nå, det skulle være version 2.0.1, efter deres hjemmeside
Avatar billede coderdk Praktikant
14. december 2004 - 17:01 #29
Hmmm weird! Har du prøvet for sjov at ændre imagecopy til imagecopymerge?
Avatar billede lsskaarup Nybegynder
14. december 2004 - 17:10 #30
Virker heller ikke, selv med procent-parameteren på 100.

Men det må sgu være png-billedet som der ikke blvier håndteret rigtigt, at en eller anden grund.
Avatar billede coderdk Praktikant
14. december 2004 - 17:13 #31
Mja, men jeg prøvede jo med dit png billede, det virkede fint :P heheh det er en smule underligt! ;) Sikker på at din browser ikke har cachet et gammelt billede? ;)
Avatar billede lsskaarup Nybegynder
14. december 2004 - 17:21 #32
nej, men jeg har vist nok aldrig haft et billede, til overlayeret, på serveren, før jeg lavede dette gennemsigtige
Avatar billede lsskaarup Nybegynder
14. december 2004 - 17:30 #33
Nej, cachen er heller ikke skyld i det.

For he......, ja undskyld mit sprog, men det er ved at irritere mig noget, nå men jeg tror jeg vil til at lægge sitet op på det rigtige område, så kan jeg jo teste for dette problem samtidig.
Avatar billede coderdk Praktikant
14. december 2004 - 17:34 #34
Jep, for det du har nu burde simpelthen virke - Jeg har testet det på en anden server også ;) Får et fint billede med et transparent "Randers Sport" på :)
Avatar billede lsskaarup Nybegynder
15. december 2004 - 14:53 #35
Må jeg bede om mine himmelblå. Det virker sgu heller ikke på det andet site.

Hvad fanden kan der være galt...

Jeg ligger lige hele min testkode op, så du kan se den.

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
    $sti_ImgBack = "images/produkter/adidas-sitor-taske-lille.jpg"; //$pic = "billede.jpg";
//    $sti_ImgIcon = "images/produkter/gennemsigtig-randers-sport.png"; //$overlay = "gennemsigtig-randers-sport.png"
    $sti_ImgIcon = "images/produkter/gennemsigtig-randers-sport.gif";
    $ny = "images/produkter/test.png"; //$nytpic = "testpic.jpg";
   
    $imgBack = imagecreatefromjpeg($sti_ImgBack); //$thepic = imagecreatefromjpeg($pic);
    ImageAlphaBlending($imgBack, false); //imagealphablending($thepic, true);
    //ImageSaveAlpha($imgBack, true);
    //$imgIcon = imagecreatefrompng($sti_ImgIcon); //$theoverlay = imagecreatefrompng($overlay);
    $imgIcon = imagecreatefromgif($sti_ImgIcon);

    //Finder bredde og højde på billedet
    $imgX = imagesx($imgIcon); //$imgX = imagesx($theoverlay);
    $imgY = imagesy($imgIcon); //$imgY = imagesy($theoverlay);

    ImageCopy($imgBack, $imgIcon, 10, 10, 0, 0, $imgX, $imgY); //imagecopy($thepic, $theoverlay, 10, 10, 0, 0, $imgX, $imgY);

    imagejpeg($imgBack, $ny, 100); //imagejpeg($theimg, $nytpic, 100);
//    imagepng($imgBack, $ny);//$sti_ImgBack
    imagedestroy($imgBack); //imagedestroy($thepic);
    imagedestroy($imgIcon); //imagedestroy($theoverlay);

    //IconizeImage($pic, $map);
?>
<table border="1"><tr><td><img src=<?=$ny?>></td></tr></table>
</body>
</html>

siden er på www.randerssport.dk/test.php
Avatar billede lsskaarup Nybegynder
15. december 2004 - 14:55 #36
Hov gif er selvfølgelig skiftet ud med png, det var bare lige en test, jeg egentlig godt vidste ikke ville fungere, da min udbyder gd ikke er ny eller gammel nok til at kunne håndtere gif'er
Avatar billede lsskaarup Nybegynder
15. december 2004 - 15:02 #37
AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH, dejligt.


Nu har jeg fundet fejlen, Photoshop havde åbenbart ikke gemt gennemsigtigheden ordentligt, selvom den i Windows var gennemsigtig. Jeg prøvede nemlig at lave en ny, og så fungerede det. Mærkeligt, jeg havde jo ellers i flere omgange gemt et nyt billede i Photoshop, uden at den hjalp, men det er nok et af de tilfælde, hvor man bare skal trække på skulderen, og sige "Hmpf".

Men så kan vi da få lukket et spørgsmål, coderdk smider du et svar?
Avatar billede coderdk Praktikant
15. december 2004 - 16:09 #38
Aaaaaaaaaaaaaaaaaaargh photoshop sux til sådan noget, var det jpeg eller png filen der var fuckt? Jeg har været ude for at den smadrer ting flere gange - Skriver underlige XML-headere i JPEGs f.eks...
Avatar billede lsskaarup Nybegynder
15. december 2004 - 21:40 #39
Det var png-filen, jeg tror nu ikke at det skyldes Photoshop lige som meget som min egen fejl. Jeg lavede nemlig billedet uden et baggrundslag, og det kunne den altså ikke håndtere ordentligt, men da jeg lavede baggrundslaget, og gjorde så det ikke bliver vist, så virkede det.

Jeg er egentlig løbet ind i et nyt problem, som du måske kan svare på. Det skal selvfølgelig nok give ekstra.

Min ide var at bruge funktionen direkte i mit upload-script, så jeg først får lavet det kombinerede billede, og derefter så bruger mit script til bl.a. at lave en thumbnail-kopi af billedet, men jeg har ikke rettigheder til at arbejde(imagecreatefromjpeg) med billedet der bliver uploadet, af den simple grund, at der ikke står "write" derpå.

Måske ved du hvor og hvordan jeg skal bruge chmod. Du vil kunne se hvor jeg senest har forsøgt, at placere kodestumpen, dog uden succes.

if (isset($_POST['submitNy']) && $_POST['submitNy'] == "Upload" && $_POST['rettype'] == "ny") {
    $billede = $_FILES['ProduktersBilledeNy']['name'];
    $billede = fjernDKbogstaver($billede);//Fjerne danske bogstaver (æ, ø, å, Æ, Ø og Å)
    $type = strrchr($billede, ".");// For at finde filtypen til tjek af jpeg kontra jpg
    $billede = strtolower($billede);// ændre alt til små bogstaver
    $thumbnail;// Til stien til thumbnail
    $dest = $uploaddir . $billede;
    $dest = tjekfilnavn($dest);
    $tekst = $_POST['ProduktersTekstNy'];
    $overskrift = $_POST['ProduktersOverskriftNy'];
    $prisFør = $_POST['ProduktersPrisFørNy'];
    $prisEfter = $_POST['ProduktersPrisEfterNy'];
    $type = $_POST['ProduktersTypeNy'];
    $oprettelsesDato = date('Ymd');
    $startDato = $_POST['startÅrNy'].$_POST['startMånedNy'].$_POST['startDagNy'];
    $slutDato = $_POST['slutÅrNy'].$_POST['slutMånedNy'].$_POST['slutDagNy'];
    $source = $_FILES['ProduktersBilledeNy']['tmp_name'];
    if (is_uploaded_file($source)) {
        //chmod($billede, 0777);
        //$billede = IconizeImage($billede);
        if (tjektype($_FILES['ProduktersBilledeNy']['type'])) {
            if (move_uploaded_file($source, $dest)) {
                list($width, $height) = getimagesize($dest);
               
                $new_height = 120;
                $krympefaktor = $new_height/$height;
                $new_width = round($width * $krympefaktor);
               
                /*$new_width = 100;
                $krympefaktor = $new_width/$width;
                $new_height = round($height * $krympefaktor);*/
                $destinationImage = imagecreatetruecolor($new_width, $new_height);
                if(tjektype($_FILES['ProduktersBilledeNy']['type'] == "image/pjpeg")) {
                    $sourceImage = imagecreatefromjpeg($dest);
                    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                    if ($type == ".jpeg") {
                        imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpeg")."_thumb.jpeg");
                        $thumbnail = $thumbnail_dir.basename($billede, ".jpeg")."_thumb.jpeg";// Stien til thumbnail
                    } else {
                        imagejpeg($destinationImage, $thumbnail_dir.basename($billede, ".jpg")."_thumb.jpg");
                        $thumbnail = $thumbnail_dir.basename($billede, ".jpg")."_thumb.jpg";// Stien til thumbnail
                    }
                } else if(tjektype($_FILES['ProduktersBilledeNy']['type'] == "image/png")) {
                    $sourceImage = imagecreatefrompng($dest);
                    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                    imagepng($destinationImage, $thumbnail_dir.basename($billede, ".png")."_thumb.png");
                    $thumbnail = $thumbnail_dir.basename($billede, ".png")."_thumb.png";// Stien til thumbnail
                } /*else if(tjektype($_FILES['ProduktersBillede']['type'] == "image/gif")) {
                    $sourceImage = imagecreatefromgif($dest);
                    imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $new_width, $new_height, imagesx($sourceImage), imagesy($sourceImage));
                    imagegif($destinationImage, $thumbnail_dir.basename($billede, ".gif")."_thumb.gif");
                    $thumbnail = $thumbnail_dir.basename($billede, ".gif")."_thumb.gif";// Stien til thumbnail
                }*/           
                mysql_query("INSERT INTO RS_Tilbud (tekst, sti, thumbnail, overskrift, prisFør, prisEfter, type, oprettelsesDato, startDato, slutDato)
                            VALUES ('$tekst', '$dest', '$thumbnail', '$overskrift', '$prisFør', '$prisEfter', '$type', '$oprettelsesDato', '$startDato', '$slutDato')") or die (mysql_error());
                $besked = "Tekst og billede gemt";
            } else {
                $besked = "Der blev ikke gemt noget";
            }
        } else {
            $besked = "Du prøvede at gemme et billedeformat som ikke er tilladt. Du kan gemme billeder i JPEG og PNG formaterne.";
        }
    } else {
        $besked = "Ulovlig handling!";
    }
   

}
Avatar billede coderdk Praktikant
18. december 2004 - 13:55 #40
Kører det? Skal spm. lukkes?
Avatar billede lsskaarup Nybegynder
18. december 2004 - 22:34 #41
Jo det kører og selvfølgelig skal du have dine point, så opretter jeg bare et nyr spørgsmål afgående mit sidste indlæg.
Avatar billede coderdk Praktikant
18. december 2004 - 22:40 #42
hehe sorry, var lidt uopmærksom, hvor er det præcist det går galt?
Avatar billede lsskaarup Nybegynder
18. december 2004 - 23:36 #43
Det er ved det billede som jeg uploader det går galt.

Ideen var at jeg egentlig vil overskrive dette billede, med det nye hvor det er det ekstra lag på, men jeg har ikke webbrugeren har ikke rettigheder til at overskrive  billedet når jeg vil "Iconize" billedet, så mit spørgsmål er så, hvor og hvordan jeg skal have en kodelinie, som chmod'er, så brugeren har skriverettigheder til billedet?
Avatar billede coderdk Praktikant
19. december 2004 - 01:08 #44
chmod($dest, 0777); ? eller?
Avatar billede fixbabe Nybegynder
23. oktober 2005 - 17:35 #45
Jeg forstår intet af denne samtale desværre, ville gerne have en kopi at det script der blev resultat af denne samtale. Evt med en lille forklaring om de enkelte funktioner.
Avatar billede lsskaarup Nybegynder
24. oktober 2005 - 09:07 #46
Ja, det skal du ikke være ked af. Jeg fik det faktisk heller aldrig til at virke 100%, så det blev simpelthen lagt på hylden, og jeg har ikke siden haft tid til at kigge på det igen. Det mærkelige var, så vidt jeg huske, at jeg ingen problemer havde når jeg testede på localhost, men når jeg skulle have det på webserveren, hostede andet sted, så virkede det ikke.

Men jeg vil da gerne prøve at hjælpe dig?
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