Avatar billede bleze Nybegynder
06. november 2004 - 22:47 Der er 21 kommentarer og
1 løsning

Resize billede samt komprimer

Her er en bid kode hvor jeg ønsker at tilføje resizing af det uploaded billede. Feks til 320x240 med en progressive komprimering faktor 15. Nogen der har et eksempel da jeg ikke har kunne finde noget.

<%@page import="com.oreilly.servlet.MultipartRequest" %>

<%

  if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data"))
  {
    String saveDirectory = "c:\\Upload\\";

    int maxPostSize = 128; // KB
    try {
      MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize * 1024, "MS950");
      out.println("File uploaded ok!");
    }
    catch (java.io.IOException e) { out.println("Image size exceeds limit of 128 kb."); }
...
Avatar billede arne_v Ekspert
06. november 2004 - 22:55 #1
Avatar billede arne_v Ekspert
06. november 2004 - 23:05 #2
Eller:
  http://www.yeo.id.au/jmagick/

Eller hvis du har privs til det:
  Runtime.getRuntime().exec() på et eksternt prgram
Avatar billede bleze Nybegynder
06. november 2004 - 23:29 #3
jmagick ligner noget jeg kan bruge men den virker ikke for mig... 

<%@page import="magick.ImageInfo" %>
<%@page import="magick.MagickImage" %>

      ImageInfo info = new ImageInfo();  // går ned her
      MagickImage image = new MagickImage(new ImageInfo(FileName));
      MagickImage bigger = image.scaleImage(1200, 900);
      bigger.setFileName("bigger.jpg");
      bigger.writeImage(info);
Avatar billede arne_v Ekspert
06. november 2004 - 23:30 #4
Hvad skulle der ske og hvad sker der ?
Avatar billede bleze Nybegynder
06. november 2004 - 23:32 #5
java.lang.NoClassDefFoundError fejl

jeg har lagt jar og dll i web\web-inf\lib
Avatar billede bleze Nybegynder
06. november 2004 - 23:41 #6
Avatar billede arne_v Ekspert
07. november 2004 - 00:21 #7
Har du prøvet:

SET CATALINA_OPTS="-Djava.awt.headless=true"

?
Avatar billede bleze Nybegynder
07. november 2004 - 10:23 #8
bruger tomcat (via netbeans)
Avatar billede arne_v Ekspert
07. november 2004 - 11:35 #9
Der må vel også være en mulighed for at sætte -Djava.awt.headless=true
på Tomcat når den startes fra NetBeans
Avatar billede bleze Nybegynder
07. november 2004 - 11:43 #10
Nu har jeg gennemsøgt med google på kryds og tværs. Fatter ikke hvorfor det skal være så besværligt at lave de simpleste ting i java.
Jeg er nok for forvent da jeg er vandt til Delphi og andre sprog der bliver kompileret. Der kan man sgu ikke kompilere en skid hvis den ikke kan finde tingene...

"The server encountered an internal error () that prevented it from fulfilling this request."

java.lang.NoClassDefFoundError. <- Dette sker i:  ImageInfo info = new ImageInfo();
Kan jeg se når jeg debugger. Fint nok, så har jeg tilføjet jar filen i netbeans (hvilket ikke var nødvendigt med cos) så classpath er korrekt (går jeg ud fra). Det hjalp lige fedt.
Spørgsmålet er om den ikke kan finde jmagick.dll og alle core.dll'erne fra ImageMagick, men jeg tror ikke det er problemet
Avatar billede bleze Nybegynder
07. november 2004 - 12:30 #11
woho, jeg kom vidre (spørg mig ikke hvordan)

Men nu får jeg denne fejl anden gang jeg kører webapp:

Native Library C:\WINDOWS\JMagick.dll already loaded in another classloader

Jeg har fundet denne kommentar på nettet: "//Tell jmagick.magick.Magick to not use the system ClassLoader. Put the following line in an initialization part of your webapp: System.setProperty("jmagick.systemclassloader","no");"

initialization part har jeg dog ikke kunne hitte ud af, så nu skal jeg stoppe og starte tomcat hver gang, hvilket er total irreterende.

Nogen idé om hvordan jeg får den til kun at loade dll een gang?
Avatar billede arne_v Ekspert
07. november 2004 - 19:31 #12
Hvis du kan finde hvor Tomcat bliver startet så kan du starte den med:
  -Djmagick.systemclassloader=no
men det er sikkert ikke lige til (jævnfør tidligere).

Men du kan jo bare sætte:

System.setProperty("jmagick.systemclassloader","no");

ind i en servlet eller JSP side. Et sted hvor den med garanti vil blive
udført inden JMagick aktiveres første gang.

En servlet init metode eller en JSP jspInit metode ville jo være elegant.

Men linien lige over første reference til JMagick i alle servlets / JSP sider
virker også.
Avatar billede arne_v Ekspert
07. november 2004 - 19:35 #13
JSP bliver faktisk også kompileret. To gange endda. jspc compileren
oversætter fra .jsp til .java og javac comoileren oversætter fra .java
til .class.

Problemet er nok snarere at:
  - brug af native kode fra Java kan give nogen problemer p.g.a.
    den forskellige kontekst (helt tilsvarende kan brug af native
    kode fra .NET også give nogen problemer)
  - du har valgt et bruge en server integreret med din IDE, hvilket
    er nemt at komme igang med, men som jo ikke giver den helt store
    fornemmelse for serverens konfiguration
Avatar billede bleze Nybegynder
07. november 2004 - 21:36 #14
Havde allerede en linie med System.setProperty("jmagick.systemclassloader","no");
foran, men det ser ud til at virke nu hvor netbeans har været genstartet.

Får denne fejl nu. :(
magick.MagickException: No image to scale

        ImageInfo info = new ImageInfo();       
        MagickImage image = new MagickImage(new ImageInfo(saveDirectory + FileName));
        MagickImage bigger = image.scaleImage(1200, 900);  <- i denne linie!

Filen findes og er blevet uploaded med COS.

Ang. kompilering, så ved jeg godt at java bliver kompileret, men integrationen med IDE mangler en del for at fange alt inden application køres. Som det er nu får man først mange fejl ved runtime...
Avatar billede arne_v Ekspert
07. november 2004 - 21:41 #15
Prøv og check:
  saveDirectory + FileName
Avatar billede arne_v Ekspert
07. november 2004 - 21:46 #16
Default er at JSP sider først compiles første gang de skal vises. Og derfor
for man normalt først fejlene der. Man kan godt precompile JSP sider. Jeg har
ingen anelse om hvordan man gør det i NetBeans.

Den DLL der brugers loades dynamisk og alle fejl der relaterer sig til
den vil altid komme runtime. Også hvis du i Delphi legede med LoadLibrary.
Avatar billede bleze Nybegynder
07. november 2004 - 21:46 #17
jeg får ikke "file not found" eller noget mere sigende.  har checket at saveDirectory + FileName peger på filen ved at lave en println lige før samt kigget i folderen. måske skal jeg lave en fileexist?

feks:
"c:\uploads\billede.jpg"
Avatar billede bleze Nybegynder
07. november 2004 - 22:04 #18
ingen tvivl om at filen findes. har lavet en exists() på den.

får stadig: magick.MagickException: No image to scale

øv
Avatar billede arne_v Ekspert
07. november 2004 - 22:23 #19
Kan man forestille sig at den skal være i en anden syntax ?

Med / fremfor \ ??

Eller i URL syntax ?
Avatar billede bleze Nybegynder
07. november 2004 - 22:24 #20
deres egne eksempler står uden path så det har jeg også prøvet, men får samme fejl.  jeg fatter hat.
Avatar billede bleze Nybegynder
07. november 2004 - 22:48 #21
et skridt frem og to tilbage...  fandt ud af at jeg brugte forkerte dll'er. efter det var fixet kom denne istedet:

magick.MagickApiException: UnableToOpenFile

måske jeg skal droppe denne vej og prøve noget andet, hvis der ikke er andet end problemer
Avatar billede bleze Nybegynder
17. november 2004 - 14:53 #22
Ingen ved hvordan man får dette lib til at virke. Kan ikke slippe uden om at den ikke kan finde filen selv om den ligger der!?
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
Kurser inden for grundlæggende programmering

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