Avatar billede squazz Novice
28. januar 2012 - 19:24 Der er 18 kommentarer og
1 løsning

Problemer med resize af billeder

Allerførst: JA, jeg HAR kigget rundt på exp.dk, men syntes ikke jeg fandt nogen der havde været i samme problematik som jeg er i øjeblikket. Store dele af min kode har jeg også fået inspiration til fra andre posts herinde (multi-upload af billeder).

I forsøget på at lære mig selv at "programmere" i PHP, er jeg kommet til udfordringen at lave mit eget billed-galleri.

Jeg er i øjeblikket i gang med at finde ud af hvordan jeg resizer uploadede billeder, uden at gøre dem kvadratiske og smide en masse fyld-farve på. Hertil har jeg fundet frem til denne kode: http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/ som virker meget godt skrevet.

Min egen kode ses her: http://pastebin.com/1aPBhyQy

Nu til problematikken:
Jeg kan sagtens uploade mine billeder, og har fået lavet det sådan at PHP også forstår at håndtere upload af flere billeder på én gang.

Derfor tænker jeg umiddelbart at min problematik opstår omkring linje 150 i mit pastebin.

Da jeg ikke kunne forstå hvorfor min resize kode ikke ville fungere, har jeg prøvet mig frem med en die(var_dump()) fremgangsmåde.


Følgende forsøg er lavet:
$src_x = imagesx($tempNavn);
die(var_dump($src_x))
- Retunerer: bool(false)

$image->load($tempNavn);
die(var_dump($image));
- Retunerer: object(SimpleImage)#1 (2) { ["image"]=> NULL ["image_type"]=> NULL }

$image->resizeToWidth(1024);
die(var_dump($image));
- Retunerer: object(SimpleImage)#1 (2) { ["image"]=> bool(false) ["image_type"]=> NULL }

$image->resizeToWidth(150);
die(var_dump($image));
- Retunerer: object(SimpleImage)#1 (2) { ["image"]=> bool(false) ["image_type"]=> NULL }

Med de fejlmeddelelser er der noget der siger mig at jeg enten ikke har fat i den rigtige fil når jeg sender den til mit objekt, eller også at jeg slet ikke sender nogen fil, men bare sender tomt data?

Jeg ved ikke helt hvad jeg skal gøre, jeg syntes jeg har prøvet meget forskelligt. Men når jeg hverken kan få målt bredden på billedet, eller få den sendt til objektet må der være et eller andet jeg gør forkert.

Ekstra info:
- Jeg bruger PHP 5.2
- Jeg arbejdet på et surftown webhotel

Hvis der er noget jeg har glemt at sige, eller noget som I vil have uddybet, så skriv det endeligt. Jo mere jeg kan hjælpe jer med at hjælpe mig, jo bedre :)
Avatar billede olebole Juniormester
28. januar 2012 - 20:14 #1
<ole>

Din kode ser sådan ud:

// Flyt uploaded fil til destinationsmappe
if(move_uploaded_file($tempNavn, $original))
{   
    $src_x = imagesx($tempNavn);
    $src_y = imagesy($tempNavn);

Læg mærker til, hvad der står i kommentaren - og hvad funktionen hedder. Når du har kørt den funktion, hvad mon så $tempNavn refererer til?  *o)

/mvh
</bole>
Avatar billede squazz Novice
28. januar 2012 - 20:17 #2
1. Haha, du har ret :D  Jeg vil da lige prøve at hente den fil der er blevet flyttet i stedet for at referere til den nu ikke-eksisterende midlertidige fil :P

2. Hvordan laver du de bokse? Er det en form for citations boks?
Avatar billede olebole Juniormester
28. januar 2012 - 20:21 #3
1) Lovende strategi, dér!  *o)

2) Må jeg anbefale min lille BB-editor? Du kan også lave BB-koder i hånden - der er et link til en anden guide om E's BB-koder i min guide
Avatar billede squazz Novice
29. januar 2012 - 12:06 #4
Jeg har nu lavet følgende kode:

// Flyt uploaded fil til destinationsmappe
if(move_uploaded_file($tempNavn, $original))

    $src_x = imagesx($tempNavn);
    $src_y = imagesy($tempNavn);

om til:

                    if(move_uploaded_file($tempNavn, $original))
{   
    $src_x = imagesx($original);
    $src_y = imagesy($original);

Men får stdig bool(false) ved:
$src_x = imagesx($original);
die(var_dump($src_x))

Linker jeg ikke rigtigt til den uploadede fil?
Avatar billede olebole Juniormester
29. januar 2012 - 15:39 #5
Jamen, er $original ikke en streng? Funktionen imagesx forventer et billedobjekt
Avatar billede squazz Novice
29. januar 2012 - 16:04 #6
Altså, $original bruges jo ved move_uploaded_file($tempNavn, $original) til at bestemme hvor billedet skal flyttes hen, og hvilket navn den skal have.

Så med imagesx($original) må jeg vil angive stien til hvor billedet befinder sig?

Men det er måske forkert opfattet at det er sådan det skal laves?
Avatar billede olebole Juniormester
29. januar 2012 - 16:20 #7
Ja, det er ikke en streng med adressen, du skal bruge. Det er et image objekt
Avatar billede squazz Novice
29. januar 2012 - 16:27 #8
Hmm, så jeg skal have billedet i en eller anden form for cache så jeg smider selve billedet ind i min funktion, i stedet for at give det adressen til billedet?

I så fald, hvordan gør jeg lige det? Hvis jeg bruger move_uploaded_file funktionen har jeg jo flyttet filen, så det vil betyde at jeg først skal flytte filen til sidst?
Avatar billede olebole Juniormester
29. januar 2012 - 17:43 #9
Som der står, skal du oprette et image objekt med en af GDLib's funktioner til dette - f.eks. imagecreatetruecolor
Avatar billede squazz Novice
30. januar 2012 - 12:08 #10
imagecreatefrompng(jpg og gif) afhjalp problemet med imagesx. Men jeg har stadig den samme problematik med mit objekt :/


$src = imagecreatefrompng($tempNavn);
if(empty($src))
{
  $src = imagecreatefromjpeg($tempNavn);
}
if(empty($src))
{
  $src = imagecreatefromgif($tempNavn);
}

$image = new SimpleImage();
$image->load($src);
$image->resizeToWidth(1024);
die(var_dump($image));
$image->save($normal);
$image->resizeToWidth(150);
$image->save($thumbnail);


Er vi ikke enige om at jeg nu smider et billede-objekt ind mit objekt?
Avatar billede olebole Juniormester
30. januar 2012 - 13:55 #11
Nej, klassens load tager vist en streng som argument: $filename
Avatar billede squazz Novice
30. januar 2012 - 14:21 #12
Så her skal jeg, fordi jeg lige har flyttet filen, referere til den nye position som det uploadede billede har fået?
Avatar billede olebole Juniormester
30. januar 2012 - 14:29 #13
Ja
Avatar billede squazz Novice
30. januar 2012 - 17:18 #14
TUSIND tak! :D Nu virker det :)
Og så lærte jeg også en masse om nogle nye funktioner ;)

Næste stop må være for mig at skrive koden lidt om så jeg næste gang ikke skal klargøre en masse ting før jeg kan arbejde med objektet :)

- Hvis du smider et svar får du lige lidt points :)

Endnu engang tak for hjælpen ;)
Avatar billede olebole Juniormester
30. januar 2012 - 17:21 #15
Ellers tak, du lægger bare et selv og accepterer det, så tråden lukkes  =)
Avatar billede squazz Novice
30. januar 2012 - 17:27 #16
Det her forstår jeg ikke, hvorfor vil du ikke have points for din indsats?
Avatar billede olebole Juniormester
30. januar 2012 - 17:52 #17
Jeg samler ikke point og har ikke gjort det gennem det seneste årstid. Men tak for tilbudet  =)
Avatar billede squazz Novice
30. januar 2012 - 17:59 #18
Det er generøst ;) Og ret cool :)
Avatar billede olebole Juniormester
30. januar 2012 - 18:05 #19
Tak. Efter 12 år har pointene mistet deres magi. De var sjove de første par år, men nye brugere skal have chancen for at komme op på listerne  *o)
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