Avatar billede cmau Nybegynder
25. april 2005 - 21:11 Der er 31 kommentarer og
1 løsning

Lav noget med .gif og .jpg billeder

Hey Eksperter

Jeg sidder her og mangler lidt, før min hjemmeside kan blive færdig. Der er mulighed for mine brugere at uploade billeder, når de billeder så skal vises skal man hente dem via. fx index.php?img_id=1 så finder den billedet med id 1, i databasen også skal den smide et logo på nede i venstre, som hedder logo.gif, det skal så være 45 x 45.

Den skal også kunne hvis jeg går ind via. index.php?img_id=1&thumb=true så resizer den billedet til 130 også højden bliver passende derefter. Hvis billedet bliver resized skal det lille logo IKKE på.

Nogle der kan lave et sådant system til mig? Husk den skal kunne gøre det ved både .gif og ved .jpg skal den kun kunne smide det lille logo oven på, da jeg selv godt kan resize det.
Avatar billede cmau Nybegynder
25. april 2005 - 21:15 #1
Tror selv jeg har fundet noget med .jpg, så hvis i vil lave det, så kun til .gif
Avatar billede cpfrande Nybegynder
26. april 2005 - 10:00 #2
Hvis du i forvejen har den til JPG, kan du jo blot tilpasse den til GIF også. Er for så vidt kun måden, hvorpå du loader dit billede, der skal ændres som sådan.
Avatar billede cmau Nybegynder
26. april 2005 - 14:08 #3
Er det samme måde når man skriver noget oven på billedet?

Jeg har denne metode til at smide et vandmærke på:

<?php
header('content-type: image/jpeg');
$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($_GET['src']);
$size = getimagesize($_GET['src']);
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
?>

Hvordan får jeg den til at virke til .gif også?
Og hvordan resizer jeg i .gif?
Avatar billede cpfrande Nybegynder
26. april 2005 - 14:12 #4
Jep, som du kan se sætter du et png-billede ind på et jpeg billede, så det er faktisk bare at tilpasse dit watermark til at bruge metoden for at hente en gif-fil i stedet :-)
Avatar billede cmau Nybegynder
26. april 2005 - 14:16 #5
Det er lige det, jeg ved ikke hvordan jeg henter .gif-filer ind
Avatar billede xyborx Nybegynder
26. april 2005 - 14:16 #6
Sidst jeg læste om billedredigering med php, var det ikke umiddelbart muligt at bruge gif billeder pga licensproblemer. Den eneste mulighed var (er stadig?) at neddatere gdlib til en version fra før gif blev fjernet.
Avatar billede cpfrande Nybegynder
26. april 2005 - 14:18 #7
cmau: http://dk2.php.net/manual/en/function.imagecreatefromgif.php

xyborx: Tjae, det ved jeg ikke af. Den gdlib udgave, der er med PHP5 er med gif, sååå...
Avatar billede cmau Nybegynder
26. april 2005 - 14:24 #8
cpfrande > Jeg har desværre aldrig kunne finde rundt i de funktion, som php.net har lavet, så kunne du ikke tænke dig at bruge lidt tid på at få den skrevet op, ligesom den jeg skrev til jpg?
Avatar billede cpfrande Nybegynder
26. april 2005 - 14:26 #9
Du skal som sagt bare ændre metoden du læser filen med... dvs. udbytte:
$watermark = imagecreatefrompng('watermark.png');
med:
$watermark = imagecreatefromgif('sti/til/gif-fil.gif');
Avatar billede cmau Nybegynder
26. april 2005 - 14:27 #10
Også ville det bare funke?

Men hvordan resizer jeg så .gif-filer?
Avatar billede cpfrande Nybegynder
26. april 2005 - 14:44 #11
på samme måde som du resizer en JPEG fil...

Anbefaler at du kigger på http://dk2.php.net/manual/en/ref.image.php

Det er vigtigt at kunne bruge dokumentationen til PHP, hvis man ønsker at programmerer i det. Den er virkelig god!
Avatar billede cmau Nybegynder
26. april 2005 - 14:55 #12
Det er somom du siger 2 modsatte ting, at jeg kan kigge på en side, for at finde ud af det, men det er på samme med? Der er vel noget jeg skal ændre?
Avatar billede cmau Nybegynder
26. april 2005 - 15:01 #13
Kan jeg bare gøre sådan her så?:

mysql_query("INSERT INTO fuck_halloffame (year,about) VALUES ('$_POST[year]','$_POST[about]')") or die(mysql_error());

$til = "images/halloffame/".mysql_insert_id()."_big.gif";
$til_lille = "images/halloffame/".mysql_insert_id().".gif";

copy($_FILES["picture"]["tmp_name"],$til);

$width = 400;
$height = 300;

$dst_img = imagecreatetruecolor($width,$height);
$src_img=ImageCreateFromGif("$til");

ImageCopyResampled($dst_img,$src_img,0,0,0,0,$width,$height,ImageSX($src_img),ImageSY($src_img));

ImageGif($dst_img, $til_lille, 100);

unlink("images/halloffame/".mysql_insert_id()."_big.jpg");
Avatar billede cpfrande Nybegynder
26. april 2005 - 15:03 #14
Jeg modsiger ikke mig selv på nogen måde.

Jeg fortæller dig, at du resizer et GIF-billede via GDlib på samme måde som du gør med et JPEG billede. Dertil henviser jeg dig til PHPs dokumentation for GDlib kommandoerne. Der kan du bl.a. se kommandoerne for at resize.

Der er flere muligheder, bl.a.:
http://dk2.php.net/manual/en/function.imagecopyresampled.php
http://dk2.php.net/manual/en/function.imagecopyresized.php

Du må bare hoppe igang med at læse - det står forklaret ganske enkelt på engelsk.

- Kristian
Avatar billede cpfrande Nybegynder
26. april 2005 - 15:05 #15
Virker koden du skrev før? Hvis ja, så kan du. Hvis nej, så kan du ikke.
Avatar billede cmau Nybegynder
26. april 2005 - 15:16 #16
Nu har jeg testet og den kode jeg skrev før virkede. Det er en af de første gang, hvor jeg har prøvet at ændre fra en fil type til en anden, uden en eneste fejl.

Jeg sætter mig til at lave index.php, til at resize osv. engang i dag. Men ville lige høre om hvordan jeg finder ud af hvilken filtype billedet er, så hvsi de prøver med .png skal det ikke virke, kun .gif og jpg
Avatar billede cpfrande Nybegynder
26. april 2005 - 15:24 #17
Det tjekker du jo når filerne bliver uploaded.

$_FILES['variabelNavn']['type']...
Hvis nævnte variabel ikke er lig:
image/gif
image/jpg
image/jpeg
image/pjpeg

skal du udsende en fejlbesked fremfor at udføre gem-kommandoerne.
Avatar billede cmau Nybegynder
26. april 2005 - 15:39 #18
Jeg syntes altså at det er mega svært :/, men er nået så langt her:

<?
$img_id = $_GET['img_id'];

$query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id'") or die(mysql_error());

if(mysql_num_rows($babe_sql) == 0) {

$404 = imagecreatefromjpg('404.jpg');

imagejpeg($404);
exit;
} else {
$row = mysql_fetch_assoc($query);

$logo = imagecreatefromgif('logo.gif');

if($row['file_type'] == ".gif") {
header('content-type: image/gif');
$image = imagecreatefromgif($img_id.".gif");
} elseif($row['file_type'] == ".jpg") {
header('content-type: image/jpg');
$image = imagecreatefromjpg($img_id.".jpg");
}


}

Nu skal jeg til at smide $logo på $image og det skal sidde 5px fra venstre hjørne, altså helt nede i hjørnet, bare man bruger padding i html til at rykke 5px ind og op.

Hvordan gør jeg så det?
Avatar billede cmau Nybegynder
26. april 2005 - 15:53 #19
Nu kom jeg en del videre, men får denne fejl:
Parse error: parse error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /mnt/raid/www/www/babegalleri/test/images/users/hotornot/index.php on line 16

Koden:
<?
include('sql.php');
$img_id = $_GET['img_id'];

$query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id'") or die(mysql_error());
$row = mysql_fetch_assoc($query);

if($row['file_type'] == ".gif") {
header('content-type: image/gif');
} else {
header('content-type: image/jpg');
}

if(mysql_num_rows($babe_sql) == 0) {

$404 = imagecreatefromjpg('404.jpg');

imagejpeg($404);
exit;
} else {

$logo = imagecreatefromgif('logo.gif');
$logo_width = 45;
$logo_height = 45;

$image = imagecreatetruecolor($logo_width, $logo_height);

if($row['file_type'] == ".gif") {
$type = ".gif"
$image = imagecreatefromgif($img_id.$type);
} elseif($row['file_type'] == ".jpg") {
$type = ".jpg"
$image = imagecreatefromjpg($img_id.$type);
}

$size = getimagesize($img_id.$type);

$dest_x = $size[0] - $logo_width - 5;
$dest_y = $size[1] - $logo_height - 5;

imagecopymerge($image, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);

if($row['file_type'] == ".gif") {
imagegif($image);
} elseif($row['file_type'] == ".jpg") {
imagejpeg($image);
}

imagedestroy($image);
imagedestroy($logo);
}
?>
Avatar billede cpfrande Nybegynder
26. april 2005 - 16:09 #20
Halløjsa,

if(mysql_num_rows($babe_sql) == 0) { <--- hvor definerer du $babe_sql henne ?

Dertil er funktionen ikke:
imagecreatefromjpg();

men:
imagecreatefromjpeg();

- Kristian
Avatar billede cmau Nybegynder
26. april 2005 - 16:20 #21
Det hjalp mig lidt videre, men nu får jeg denne fejl:
Parse error: parse error, unexpected T_VARIABLE in /mnt/raid/www/www/babegalleri/test/images/users/hotornot/index.php on line 28


http://babegalleri.dk/test/images/users/hotornot/index.php?img_id=2


Koden er blevet ændret lidt mere:

<?
include('sql.php');
$img_id = $_GET['img_id'];

$query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());

if(mysql_num_rows($query) == 0) {
header("Location:http://woox.dk");
exit;
} else {

$row = mysql_fetch_assoc($query);

if($row['file_type'] == ".gif") {
header('content-type: image/gif');
} else {
header('content-type: image/jpg');
}

$logo = imagecreatefromgif('logo.gif');
$logo_width = 72;
$logo_height = 72;

$image = imagecreatetruecolor($logo_width, $logo_height);

if($row['file_type'] == ".gif") {
$type = ".gif"
$image = imagecreatefromgif($img_id.$type);
} elseif($row['file_type'] == ".jpg") {
$type = ".jpg"
$image = imagecreatefromjpeg($img_id.$type);
}

$size = getimagesize($img_id.$type);

$dest_x = $size[0] - $logo_width - 5;
$dest_y = $size[1] - $logo_height - 5;

imagecopymerge($image, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);

if($row['file_type'] == ".gif") {
imagegif($image);
} elseif($row['file_type'] == ".jpg") {
imagejpeg($image);
}

imagedestroy($image);
imagedestroy($logo);
}
?>
Avatar billede cpfrande Nybegynder
26. april 2005 - 16:28 #22
Halløjsa,

$type = ".gif"
$image = imagecreatefromgif($img_id.$type);

Kig lige din kode igenne. Du mangler et ; efter ".gif".
Det gør du flere steder! Det er ikke så svært at tyde fejlmeddelelserne. Følg linienummeret - derfor det angives! :-)

- Kristian
Avatar billede cmau Nybegynder
26. april 2005 - 18:31 #23
Nu virker det, men se logoet http://babegalleri.dk/test/images/users/hotornot/index.php?img_id=2

Det bliver sløret det rigtige logo ser sådan her ud: http://babegalleri.dk/test/images/users/hotornot/logo.gif

Kan dette laves, så den bliver bedre?
Hele koden:

<?
include('../../../sql.php');
$img_id = $_GET['img_id'];

$query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());

if(mysql_num_rows($query) == 0) {
header("Location:http://woox.dk");
exit;
} else {

$row = mysql_fetch_assoc($query);

if($row['img_type'] == ".gif") {
header('content-type: image/gif');
} else {
header('content-type: image/jpg');
}

$logo = imagecreatefromgif('logo.gif');
$logo_width = 72;
$logo_height = 72;

$image = imagecreatetruecolor($logo_width, $logo_height);

if($row['img_type'] == ".gif") {
$type = ".gif";
$image = imagecreatefromgif($img_id.$type);
} else {
$type = ".jpg";
$image = imagecreatefromjpeg($img_id.$type);
}

$size = getimagesize($img_id.$type);

$dest_x = $size[0] - $logo_width - 5;
$dest_y = $size[1] - $logo_height - 5;

imagecopymerge($image, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);

if($row['img_type'] == ".gif") {
imagegif($image);
} else {
imagejpeg($image);
}

imagedestroy($image);
imagedestroy($logo);
}
?>
Avatar billede cpfrande Nybegynder
26. april 2005 - 18:59 #24
Halløjsa,

Jeg kan ikke se logoet i først angivne link.

GDLib er ikke godt til rediger - det kan lave sådanne sløringer.
Jeg ved ikke om man kan bruge andre funktioner i PHP til at afhjælpe dette.

- Kristian
Avatar billede cmau Nybegynder
26. april 2005 - 19:01 #25
Fandt selv ud af noget andet.. fik lavet de lille logo meget bedre kvalitet, så bliver det næsten ikke ødelagt
Avatar billede cpfrande Nybegynder
26. april 2005 - 19:03 #26
Det lyder godt. Så virker det vel.

Hermed angives et svar.

- Kristian
Avatar billede cmau Nybegynder
26. april 2005 - 19:07 #27
Smider du svar?

Og tusind tak for hjælpen!
Avatar billede cpfrande Nybegynder
26. april 2005 - 19:08 #28
Jeps, har jeg gjort.

Selv tak! :-) God fornøjelse med det! ;)

Tak for points.

- Kristian
Avatar billede cmau Nybegynder
26. april 2005 - 19:08 #29
Hovsa :P

Nå men tusind tak.

Kommer til at tænke på noget når jeg ser dit navne og din info. Er du fra Skive? Kender du en Mathias Haaning også kaldet Zek (Sæk)?
Avatar billede cpfrande Nybegynder
26. april 2005 - 19:11 #30
Jep til begge dele! :-)
Avatar billede cmau Nybegynder
26. april 2005 - 19:26 #31
Okay, går i klasse med ham :)
Han er med i projekt babegalleri.dk
Det er ham der betaler for webhotel og domæne ;)
Avatar billede cpfrande Nybegynder
26. april 2005 - 19:27 #32
okey :-)
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