Avatar billede karsekongen Nybegynder
23. juli 2006 - 22:56 Der er 18 kommentarer

lave Thumbnail

Hej nu har jeg problemer igen ;=)

Jeg har lavet en jsp side som skal lave et thumbnail

KODE:

<%@ page language="java" import="java.awt.*,java.awt.geom.*,java.awt.image.*,java.io.*,javax.imageio.*" %>


<%
  BufferedImage bsrc = ImageIO.read(new File("/home/virtual/tropehjelm.dk/public_html/billeder/1/DSC00624.JPG"));
  BufferedImage bdest =
      new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bdest.createGraphics();
  AffineTransform at =
          AffineTransform.getScaleInstance(0.5,0.5);
 
  g.drawRenderedImage(bsrc,at);

  ImageIO.write(bdest,"JPG",new File("/home/virtual/tropehjelm.dk/public_html/billeder/1/thumbs/DSC00624.JPG"));
 
%>

/KODE

Det virker fint nok på den bundlede Tomcat i Netbeans.
Men hvis jeg uploader den på min webserver (resin) får jeg følgende FEJL:

<b>500 Servlet Exception</b>

java.lang.NoClassDefFoundError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:141)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
    at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)
    at _testserv__jsp._jspService(/testserv.jsp:8)
    at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
    at com.caucho.jsp.Page.subservice(Page.java:506)
    at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
    at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:346)
    at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:534)

Resin 2.1.16 (built Tue Feb 15 11:12:27 PST 2005)

/FEJL

Mangler jeg ikke nogle klasser?? og hvordan får jeg dem op på webserveren uden det fylder alt for meget??
Avatar billede karsekongen Nybegynder
23. juli 2006 - 22:58 #1
<b>500 Servlet Exception</b> - minus bold tegnene, troede bare jeg kunne lave det fed..
Avatar billede arne_v Ekspert
24. juli 2006 - 00:44 #2
hvilken Java version kører du selv med og hvilken Java version er der på
den maskine som kører Resin ?
Avatar billede karsekongen Nybegynder
24. juli 2006 - 11:48 #3
Er det sådan her man tjekker det?

På min maksine

application.getMajorVersion() : 2
application.getMinorVersion() : 4
application.getServerInfo() : Apache Tomcat/5.5.9

På serveren

application.getMajorVersion() : 2
application.getMinorVersion() : 3
application.getServerInfo() : Resin/2.1.16
Avatar billede karsekongen Nybegynder
24. juli 2006 - 11:59 #4
Lidt mere...

min maskine

Server info = Apache Tomcat/5.5.9
Servlet engine version = 2.4
Java version = 1.5.0_06-b05
Java home = C:\Programmer\Java\jdk1.5.0_06\jre


PÅ serveren

Server Info
Server info = Resin/2.1.16
Servlet engine version = 2.3
Java version = 1.4.2-p6-rune_04_sep_2004_18_46
Java home = /usr/local/jdk1.4.2/jre
Avatar billede arne_v Ekspert
24. juli 2006 - 13:23 #5
det var Java versionen jeg var interesseret i - fordi jeg tror at det er
et Java problem og ikke er servlet engine problem

et skud i tågen:

har du prøvet

ImageIO.write(bdest,"JPEG",new File("/home/virtual/tropehjelm.dk/public_html/billeder/1/thumbs/DSC00624.JPG"));

?

(med et E i JPEG)
Avatar billede karsekongen Nybegynder
24. juli 2006 - 14:07 #6
Ok jeg er ikke så meget inde i det.. :D
Hvordan finder jeg ud af java versionen?? hvis det ikke er den her : Java version = 1.4.2-p6-rune_04_sep_2004_18_46

Har prøvet med JPEG i stedet får, det giver samme fejl.

Kan jeg evt lave thumbs på en måde så jeg undgår problemet?
Hvordan løses det, hvis du ved det?
Avatar billede karsekongen Nybegynder
24. juli 2006 - 14:12 #7
Jeg har prøvet at udkommentere linierne en efter en.
Hvis jeg udkommenterer alt med Grahics2D kommer der ingen fejl.

fejlen kommer ved: Graphics2D g = bdest.createGraphics();
Avatar billede arne_v Ekspert
24. juli 2006 - 14:18 #8
det er den

trp79 postede noget den anden dag som du måske kan bruge
http://www.eksperten.dk/spm/721725
Avatar billede karsekongen Nybegynder
24. juli 2006 - 14:32 #9
Jeg prøver lige om jeg kan få det til at virke...ellers må jeg jo skrive igen :)
Tak for hjælpen
Avatar billede karsekongen Nybegynder
24. juli 2006 - 15:10 #10
Det virker med den kode som trp79 har lavet

KODE

<%@ page language="java" import="java.io.*, javax.imageio.*,java.awt.image.*, java.awt.geom.*, java.awt.RenderingHints" %>

<%

        // Read in original image to create thumbnail from
        File inFile = new File("/home/virtual/tropehjelm.dk/public_html/billeder/1/DSC00624.JPG");
        BufferedImage bufferedImage = ImageIO.read(inFile);
        // Calculate scale so image fits in a square area of thumbNailSize - e.g. 160
        int imageWidth = bufferedImage.getWidth();
        int imageHeight = bufferedImage.getHeight();
        double scale = 0.1;
       
        // Now create thumbnail
        AffineTransform affineTransform = AffineTransform.getScaleInstance(scale,scale);
        AffineTransformOp affineTransformOp = new AffineTransformOp(affineTransform,null);
        BufferedImage scaledBufferedImage = affineTransformOp.filter(bufferedImage,null);
        // Now do fix to get rid of silly spurious line
     
        int scaledWidth = scaledBufferedImage.getWidth();
        int scaledHeight = scaledBufferedImage.getHeight();
     
        int expectedWidth = (int)(imageWidth * scale);
        int expectedHeight = (int)(imageHeight * scale);
        if ( scaledWidth > expectedWidth || scaledHeight > expectedHeight )
        scaledBufferedImage = scaledBufferedImage.getSubimage(
        0,0,expectedWidth,expectedHeight);
        // Now write out scaled image to file
        ImageIO.write(scaledBufferedImage,"JPG",new File("/home/virtual/tropehjelm.dk/public_html/billeder/1/Thumb.JPG"));
   

%>
Avatar billede karsekongen Nybegynder
24. juli 2006 - 18:30 #11
har lige et spørgsmål mere.

Jeg har lavet en for lykke som laver thumbnails af aller filerne i en mappe

KODE:

String id = request.getParameter("galleriid");
    String siden = "/home/virtual/tropehjelm.dk/public_html/billeder/"+id;
   
  File mDir = new File(siden+"/thumbs");
  if (mDir.mkdir()==true) out.write("Mappen Thumbs blev lavet");
  else out.write("mappen Thumbs blev lavet");

    File mappe = new File(siden) ;  // mappen siden er i
  File[] filer = mappe.listFiles();
 
  //thumbnail

  String tpath = siden+"/thumbs/";
    for (int i=0; i<filer.length; i++)
  {
   
    File f = filer[i];
    if (f.isDirectory());
    else {
    // Read in original image to create thumbnail from
        File inFile = new File(siden+"/"+f.getName());
        BufferedImage bufferedImage = ImageIO.read(inFile);
        // Calculate scale so image fits in a square area of thumbNailSize - e.g. 160
        int imageWidth = bufferedImage.getWidth();
        int imageHeight = bufferedImage.getHeight();
        double scale = 0.1;
       
        // Now create thumbnail
        AffineTransform affineTransform = AffineTransform.getScaleInstance(scale,scale);
        AffineTransformOp affineTransformOp = new AffineTransformOp(affineTransform,null);
        BufferedImage scaledBufferedImage = affineTransformOp.filter(bufferedImage,null);
        // Now do fix to get rid of silly spurious line
     
        int scaledWidth = scaledBufferedImage.getWidth();
        int scaledHeight = scaledBufferedImage.getHeight();
     
        int expectedWidth = (int)(imageWidth * scale);
        int expectedHeight = (int)(imageHeight * scale);
        if ( scaledWidth > expectedWidth || scaledHeight > expectedHeight )
        scaledBufferedImage = scaledBufferedImage.getSubimage(
        0,0,expectedWidth,expectedHeight);
        // Now write out scaled image to file
        ImageIO.write(scaledBufferedImage,"JPG",new File(tpath+f.getName()));
    }
  }

/KODE

Det virker fint nok. Men efter jeg havde kørt siden nogle gange fik jeg den her fejl:

FEJL

500 Servlet Exception

java.lang.OutOfMemoryError

Resin 2.1.16 (built Tue Feb 15 11:12:27 PST 2005)

/FEJL

Hvad skal jeg gøre for at undgå den fejl??
kan/skal jeg tømme memoryen efter hvert gennemløb??
Avatar billede arne_v Ekspert
24. juli 2006 - 18:59 #12
hmm

enten er der bare ikke sat memory nok af til et bestemt billede

eller saa er der en mmeory leak

ouch
Avatar billede karsekongen Nybegynder
24. juli 2006 - 19:20 #13
OK...
Altså det virkede fint i starten. Men efter ca. 3 gennemkørsleer på forskellige mapper med 6 filer i hver. (ca. 500KB stk.)

Er der noget jeg kan gøre ved det?
Avatar billede karsekongen Nybegynder
24. juli 2006 - 19:33 #14
det går galt når lykken kører femte gang.
Avatar billede arne_v Ekspert
25. juli 2006 - 02:46 #15
så lækker den memory ...

:-(
Avatar billede karsekongen Nybegynder
25. juli 2006 - 11:23 #16
Er det bare noget dårlig kode?? eller er der en fejl i java?
Avatar billede arne_v Ekspert
25. juli 2006 - 13:20 #17
lyder som en fejl i Java desværre
Avatar billede karsekongen Nybegynder
26. juli 2006 - 00:02 #18
crap :) jeg takker mange gange for hjælpen.
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