oddkeir Skrevet 20. juni 2004 Del Skrevet 20. juni 2004 Hei Jeg holder på å lage en webside i perl som kan oppdaterets via web. Men jeg har et problem når det gjelder bilder. Hvordan kan jeg lage en webløsning, der du kan legge ut bilder. Jeg ser for meg at man får opp et vindu ("open-vindu") der du blar deg fram til riktig bilde på HDen, og sender bildefilen ut på serveren. Er det også mulig å kontrollere WIDTH og HEIGHT på en bildefil? Odd Keir Lenke til kommentar
Torbjørn Skrevet 21. juni 2004 Del Skrevet 21. juni 2004 ønsker du å laste opp bilder? se i såfall på perldoc CGI, det står et avsnitt eller to der om hvordan håndtere filopplasting Lenke til kommentar
Torbjørn Skrevet 21. juni 2004 Del Skrevet 21. juni 2004 Jeg pleier å bruke Image::Magick for bildemanipulasjon, http://www.imagemagick.org/www/perl.html Lenke til kommentar
W0odY Skrevet 21. juni 2004 Del Skrevet 21. juni 2004 Jeg har ett lite bilde upload script som jeg skrev til et galleri engang kan hende du finner noen brukbare koder der.. #!/usr/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; ############# Edit ########################### #Mappa til der fila du laster opp skal havne! $dir = "/home/Navn/public_html"; $url = "http://din.side.no"; ############################################## $cgi = new CGI; $rel = $cgi->url(-relative=>1); if (!$ENV{'QUERY_STRING'}) {&last_opp;} elsif($ENV{'QUERY_STRING'} eq 'last_opp'){&lastet_opp;} else {print "Ups, en feil gitt?";} sub last_opp { print qq~ <FORM ACTION="$rel?last_opp" METHOD="post" ENCTYPE="multipart/form-data"> <p>Velg en fil:</p> <p><INPUT TYPE="file" NAME="file"></p> <p><INPUT TYPE="submit" NAME="Submit" VALUE="Last opp"></p> </FORM> ~; } sub lastet_opp { $file = $cgi->upload("file"); $file =~ s/.*[\/\\](.*)/$1/; open FILE, ">$dir/$file"; while (<$file>){print FILE;} close FILE; # Resize # use Image::Magick; $readimage = "$dir/$file"; $writeimage = "$dir/resize-$file"; ($image,$x); $image = Image::Magick->new(); $x = $image->Read(filename=>"$readimage"); die $x if $x; $x = $image->Resize(geometry=>'80x80'); # Skriv in størelsen du vil ha på resize bilde die $x if $x; $x = $image->Write(filename=>"$writeimage"); die $x if $x; print qq~ <p align="center">Ferdig! :D</p> <p align="center"><img src="$url/resize-$file"></p> <p align="center"><img src="$url/$file"></p> <br><br> <p align="center"><a href="$rel">Tilbake</a></p> ~; } Men da må serveren ha støtte for ImageMagic.. Lenke til kommentar
Torbjørn Skrevet 22. juni 2004 Del Skrevet 22. juni 2004 perl-imagemagick finnes som regel i form av en eller annen pakke for din distro. hvis ikke kan du be om å få den installert vha CPAN Lenke til kommentar
kjetil_b Skrevet 9. juni 2006 Del Skrevet 9. juni 2006 Etter å ha slitt med bildeopplasting har jeg prøvd dette scriptet, men får bare feilmelding. Bildet lastes opp, men jeg får feilmelding etter den første opplastingen. Fjerner jeg errorsjekken, så vil bildet heller ikke forminskes. Har sjekket Image::Magick , og jeg har nyeste versjon som fungerer fint. Exception 435: unable to open image `': No such file or directory at upload2.cgi line 42. Har riktig chmod på mappa, og kan ikke forstå hvorfor jeg skal få en slik feilmelding. Dette setter og en stopper for mitt lille prosjekt, så hvis noen har forslag til hva jeg kan gjøre, så tar jeg imot det med takk. Det står heller ingenting i errorloggen, så er blir litt oppgitt. Lenke til kommentar
trtrtr Skrevet 15. juni 2006 Del Skrevet 15. juni 2006 Returnerer ikke upload() metoden et filehandle, ikke filnavn? #Bare begynn å bruk denne, herregud mann du kommer ikke til å angre : ) use strict; sub lastet_opp { my $file = $cgi->param('file'); my $filehandle = $cgi->upload($file); $file =~ s/.*[\/\\](.*)/$1/; open FILE, ">$dir/$file" or die "Could not open file ($file), $!"; while (<$filehandle>){print FILE;} close FILE; close $filehandle; ... osv.. Et annet tips er å benytte FindBin (og relative paths) istedenfor absolutte paths, og gjøre en chdir først i scriptet slik at man er sikker på at stående katalog er samme som der hvor scripet befinner seg (viktig dersom script skal kjøres med cron osv). use FindBin qw/$RealBin/; chdir $RealBin; Lenke til kommentar
kjetil_b Skrevet 21. juni 2006 Del Skrevet 21. juni 2006 Jeg får det ikke til å stemme uansett hva jeg gjør. Får samme feilen(Exception 435) hver gang. Har prøvd det aller meste. Lastet opp scriptet som W0odY la ut her i tråden, gir det 755, opprettet ei ny mappe(777), og setter inn riktig path. Funker ikke. Virker som jeg må droppe hele bildeopplastings-prosjektet mitt. Lenke til kommentar
trtrtr Skrevet 25. juni 2006 Del Skrevet 25. juni 2006 Bare en kjapp rettelse. upload metoden tar parameter fra form som input, ikke filnavn fra param() metoden (slik som det hevdes i "cgi programming in perl", 2nd ed, s98).. Blir da: my $filehandle = $cgi->upload('file') or die "Could not get filehandle, $!"; $file =~ s/.*[\/\\](.*)/$1/; #Debug. e.g. "Filename:test.JPG" #print "\nFilename:$file"; my $StoreFile = "$dir/$file"; open FILE, '>', $StoreFile or die "Could not open storefile ($StoreFile), $!"; print FILE while (<$filehandle>); close $filehandle; close FILE; Videre så må du debugge ImageMagick.. #e.g. #my $r = ResizeImage($ImgFileName, $NewImgFileName, '80x80'); sub ResizeImage { my ($fn, $NewFile, $NewSize) = @_; die "Missing filename ($fn) or NewSize ($NewSize)" if (not $fn or not $NewSize); die "Image-file ($fn) does not exist on disk" if ( not -e $fn ); die "Zero sized image file" if (-z $fn); my $image = Image::Magick->new(); #Vet ikke noe om håndtering av feilmeldinger fra image-magick.. my $Res = $image->Read(filename => $fn); $Res = $image->Resize(geometry => $NewSize); $Res = $image->Write(filename => $NewFile); } Lenke til kommentar
kjetil_b Skrevet 28. juni 2006 Del Skrevet 28. juni 2006 Takk for flott svar! Skal få prøvd det ut, og håper at det funker. Jeg har prøvd dette scriptet på en annen server, men der er ikke Image::Magick lagt inn som perl modul, men det er visst innstallert, og jeg må bruke et converter program for å få det til å fungere. Det ble nevnt i en tråd i et forum at jeg måtte bruke denne path'en: /usr/bin/convert Noen som vet hvordan jeg kan bruke dette i f.eks. dette scriptet? Har søkt litt i google, men det var ikke så enkelt å finne et emne om dette. Prøvde et par andre perl forum også, men det stod ingenting om dette. Lenke til kommentar
trtrtr Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 Hei, du kan bruke system-kommandoen (se perldoc -f system eller slå opp i programming perl), men forutsetter at du har rettigheter til å kjøre nevnte sak, selfølgelig. Det er også en annen modul som kan håndtere bilde manipulering, Imager, kan jo sjekke om den er installert (kanskje tvilsomt, men man vet aldri). Se CPAN for detaljer: http://search.cpan.org/search?query=imager&mode=all Lenke til kommentar
saivert Skrevet 30. juli 2006 Del Skrevet 30. juli 2006 Hva med GD biblioteket da? Dette fungere jo både i Perl og PHP. Bruker selv GD i min dynamisk avatar PHP skript. Funker hver gang bortsett fra når den skal lese inn korrupte JPEG bilder hvor ImageMagick er litt mer tolerant og takler dette bedre. ImageMagick har også bedre kvalitet på output av JPEG og forminskede bilder ser litt bedre ut. Men til mitt prosjekt så fungerer GD meget fint. Presiserer at jeg bruker GD2 her og ikke GD1 (den gamle versjonen). Lenke til kommentar
kjetil_b Skrevet 31. juli 2006 Del Skrevet 31. juli 2006 Har flyttet til den nevnte serveren, og de har fått de til å innstallere Image::Magick, og alt fungerer strålende! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå