Avatar billede thomaaaz Nybegynder
22. februar 2005 - 02:29 Der er 13 kommentarer og
1 løsning

lav om fra image til bufferedImage med javax.imageio

Jeg har en applett, som jeg gerne vil lave om til et jpeg - altså en form for screenshot af appletten.
selve appletten er et billede, der er hentet ind og derefter manipuleret med af brugeren. Dette billede skulle brugeren så gerne have mulighed for at gemme på sin HD.
Jeg vil gerne bruge javax.imageio og ikke Suns jpegcodecs, da disse ikke kan læses af andre end Suns egen VM.

Jeg er virkelig på herrens mark - jeg har aldrig arbejdet med billeder i Java...
Avatar billede arne_v Ekspert
22. februar 2005 - 20:01 #1
Hvorfor er det et problem med com.sun.image.codec.jpeg.JPEGImageEncoder ?

MS Java understøtter ikke javax.imageio anyway.

Og >99% af resten måd bruge SUN Java (IBM, BEA og Oracle Java er stort set
server only).
Avatar billede thomaaaz Nybegynder
22. februar 2005 - 20:21 #2
jeg ved faktisk ikke så forfærdentlig meget om det, men gik ud fra at det kunne ske at være et problem for nogen at bruge skidtet. (mine forældre har fx. netbank, der SKAL bruge MS Java, men hvis dette heller ikke understøtter imageio...)
hvorom alting er, skal jeg lave dette som en webapplikation, der køres vha. javascript, og det er meningen at brugerne af siden kan hente det færdige billede (efter det er blevet manipuleret)
her kan du se det der er lavet og så giver det nok også bedre mening:
http://imv.au.dk/fredagsbar/create/goCreate.htm
Billedet skal efter manipulationen gemme billedet lokalt som en jpeg og jeg har kigget lidt på nogle muligheder.
Selve det ændrede billede er af objektet image og det skal jo i første omgang, for at kunne laves til Jpeg, laves til et bufferedImage. jeg har fundet lidt hjælp til dette her: http://javaalmanac.com/egs/java.awt.image/Image2Buf.html?l=rel
Så skal det laves om til et Jpeg og brugeren skal få mulighed for at gemme lokalt. Men kan man godt få lov til at gemme en fil på brugerens maskine og i så fald hvordan gør man det?
Det var vist mere end et spørgsmål, men jeg håber der er hjælp at hente alligevel.
Mvh
Thomas
Avatar billede arne_v Ekspert
22. februar 2005 - 20:26 #3
Jeg tror ikke at kan lave image rediegering via JavaScript.

Det er pærenemt at lade en applet gemme data på den server som
den er hentet fra. Applet<--->PHP/ASP/JSP/ASP.NET/Perl-CGI er
ikke noget problem.

Hvis en applet skal gemme en fil lokalt så skal den grantes privs, men
det er måske også en mulighed.
Avatar billede thomaaaz Nybegynder
22. februar 2005 - 20:42 #4
hvad er det lige at privs er?... (tilladelse til at gemme på klientens HD?)
men det kunne også sagtens gemmes på serveren hvis det var, men skal det så ikke sendes som noget andet end Jpeg og i så fald hvordan laver man det om til Jpeg - omformer det til noget det kan uploades til server og lagrer det på serveren?
Avatar billede arne_v Ekspert
22. februar 2005 - 20:46 #5
Ja.

Et byte array som indehoder JPEG data vill være velegnet til at uploade.
Avatar billede thomaaaz Nybegynder
22. februar 2005 - 21:03 #6
ja - det er så det - men hvordan komprimerer man et image til Jpeg-format og ikke mindst - hvordan omformes dette til et byte array?
en af mine venner lavede mig dette i Javascript, der laver billedet om fra image til variablen data, som jeg ikke helt kan gennemskue om det er et array eller en string. Problemet med det, er at dette gøres på brugerens maskine og det ville kræve en ændring til jpeg som objekt og ikke som fil - kan dette lade sig gøre?

<script language=javascript type=text/javascript>
var hexChars = "0123456789ABCDEF";
function Dec2Hex (Dec){
var a = Dec % 16; var b = (Dec - a)/16;
hex = "" + hexChars.charAt + hexChars.charAt ;
return hex;
}
function get() {
h=130;
document.frm1.height.value=h;
data="";
document.frm1.f.value="";
var x=0;
var y=0;
for (y=0; y<h; y++){
for (x=0; x<100; x++){ 
pixel=document.goo.modpix[x+(h-y)*100];
red = (pixel >> 16) & 0xff; green = (pixel >> 8) & 0xff;
blue = (pixel ) & 0xff;
data+=Dec2Hex(blue)+Dec2Hex(green)+Dec2Hex(red);
// data+=pixel+" ";
}
document.getElementById("i").style.width=y*266/h;
} document.frm1.f.value=data;
document.frm1.submit();
}
</script>
Avatar billede arne_v Ekspert
22. februar 2005 - 21:13 #7
Du har et:

BufferedImage bi;

så laver du:

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        JPEGImageEncoder ecd = JPEGCodec.createJPEGEncoder(baos);
        ecd.encode(bi);
        byte[]  ba = baos.toByteArray();
Avatar billede arne_v Ekspert
22. februar 2005 - 21:13 #8
JavaScript har jeg ikek forstand på.
Avatar billede thomaaaz Nybegynder
23. februar 2005 - 00:44 #9
ok - jeg er lige ved at kigge på det - umiddelbart giver den mulighed for at der måske kan komme et par exceptions... jeg kigger på det igen imorgen når jeg er mere klar i hovedet og melder tilbage der.
Avatar billede thomaaaz Nybegynder
23. februar 2005 - 19:38 #10
Når scriptet køres får jeg en

error: uncaught exception: java.security.PrivilegedActionException:
java.security.PrivilegedActionException
java.lang.reflect.InvocationTargetException

Siger det dig noget?
Avatar billede arne_v Ekspert
23. februar 2005 - 19:40 #11
nothing

sorry
Avatar billede thomaaaz Nybegynder
28. februar 2005 - 18:04 #12
hvorom alting er, virker javadelen og det skal du have point for!
send lige et svar, så får du dem

jeg får dog stadig priviligedActionException, når jeg prøver at køre applettens jpg-del i JS... jeg poster den under JS!
Avatar billede arne_v Ekspert
28. februar 2005 - 18:07 #13
svar
Avatar billede thomaaaz Nybegynder
28. februar 2005 - 18:24 #14
hey og jeg har fået skidtet til at virke - en lille skrivefejl ;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

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