[JAVA & PHP] image uit java applet posten naar php

Pagina: 1
Acties:
  • 77 views sinds 30-01-2008

  • vleesboom
  • Registratie: Augustus 2004
  • Laatst online: 28-11-2025
Na veel zoeken op internet heb ik nog geen goede oplossing gevonden voor mijn probleem.

Ik ben bezig met het schrijven van een java applet die een plaatje laadt van de server.
Vervolgens kan de gebruiker een deel van het plaatje selecteren en dit deel croppen.
Vervolgens wordt het nieuwe plaatje weergegeven in de applet.

Wat er nu nog moet gebeuren is dat het plaatje uit de applet als een .jpg bestand op de server komt te staan. Hoe doe ik dat?

van wat ik via google etc heb gevonden begrijp ik dat het misschien middels een http POST actie kan. Maar hoe precies heb ik nog niet (werkend) gevonden...

Kan iemand mij hiermee helpen?
Graag letterlijke code als dat lukt...

Een voorbeeld van de applet zoals ik die nu heb is hier te vinden: http://217.19.24.59:60/applet/applet.htm
Je moet in het grijze gebied klikken. Er verschijnt dan een plaatje van een wijnfles. (dit is ook nog een bug; de wijnfles moet meteen zichtbaar zijn...). Nu kun je een gebied selecteren van het plaatje. Klik vervolgens op de "crop"-knop en rechts van het originele plaatje verschijnt het gecropte plaatje.
Er moet nu dus nog een knop "verzend" bij die het gecropte plaatje als .jpg-bestand op de server kan opslaan. (ik vermoed met een .php bestand)

Hieronder de code van de java applet zoals ik die nu heb (er staat nog wel wat "junkcode" in, maar ik ben nog in de developing fase...):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
import java.awt.*;
import java.awt.image.*;
import java.applet.*;
import java.awt.event.*;
import java.net.*;
import java.net.URL;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.CropImageFilter;
import java.awt.image.AreaAveragingScaleFilter;
import java.awt.image.FilteredImageSource;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.lang.InterruptedException;
import java.lang.String;
import java.net.*; 
import java.io.*;

public class Applet4 extends Applet implements MouseListener, MouseMotionListener, ActionListener

{ 
    
int currentX, currentY, startX, startY,wplaatje,hplaatje;
int beginX, beginY, width, height;
int muisX, muisY,px,py;
int wp, hp;
int rectleft, recttop, nwidth, nheight;
    
boolean dragMode = false;
boolean rectclicked = false;
boolean dragrect = false;

Canvas canvas;
URL base;
Button crop;
Image origImage;
Image cropImage;
MediaTracker tracker;
    
public void init() {

  tracker = new MediaTracker(this);  
  try { 
    base = getDocumentBase(); 
  } 
  catch (Exception e) {} 
  this.origImage = getImage(base,"IMG_002.JPG"); 
  tracker.addImage(origImage,1);
  try { 
    tracker.waitForAll(); 
  } 
  catch (InterruptedException  e) {} 
                
  wplaatje = origImage.getWidth(this);
  hplaatje = origImage.getHeight(this);
  wp = wplaatje;
  hp = hplaatje;
  canvas = new Canvas();
  this.setLayout(null);
  canvas.setBounds(30,30,wp+75,hp);
  this.add(canvas);
  canvas.addMouseListener(this); 
  canvas.addMouseMotionListener(this);
  crop = new Button("crop");
  crop.setBounds(0,0,100,25);
  this.add(crop);
  crop.addActionListener(this);
}
    
public void paintcanvas() {
  Graphics g = canvas.getGraphics();
  g.drawImage(this.origImage,0,0,wp,hp,this);
  String w = "" + wplaatje;
  g.drawString(w, 10, 10);
            
  // set coordinaten //
  beginX = Math.min(startX, currentX);
  beginY = Math.min(startY, currentY);
  width = currentX - startX;
  height = currentY - startY;
  // einde coordinaten //
        
  if (dragrect == false) {
    // beperkingen voor rectangle //
    if (width < 0) { width = 0 - width; if (beginX < 0) { width += beginX; beginX = 0; } } // beperk beginX
    if (height < 0) { height = 0 - height; if (beginY < 0) { height += beginY; beginY = 0; } } // beperk beginY
    if ((beginX + width) > wp) { width = wp - beginX-1; }  // beperk width
    if ((beginY + height) > hp) { height = hp - beginY-1; } // beperk height
    // einde beperkingen //
  }

  if (dragrect == true) {
    // beperkingen voor rectangle //
    int varX = muisX-rectleft;
    int varY = muisY-recttop;
    if (varX < 0) { muisX = rectleft; } // beperk beginX
    if (varY < 0) { muisY = recttop; } // beperk beginY
    // einde beperkingen //
  }

  // teken rectangle //
  if (width > 0 && height > 0 && dragrect == false) {   
    g.drawRect(beginX, beginY, width, height); // selectievak
    g.drawRect(beginX, beginY, 4, 4); // blokje linksboven
    g.drawRect(beginX+(width/2)-2, beginY, 4, 4); // blokje middenboven
    g.drawRect(beginX+width-4, beginY, 4, 4); // blokje rechtsboven
    g.drawRect(beginX, beginY+(height/2)-2, 4, 4); // blokje linksmidden
    g.drawRect(beginX+width-4, beginY+(height/2)-2, 4, 4); // blokje rechtsmidden   
    g.drawRect(beginX, beginY+height-4, 4, 4); // blokje linksonder
    g.drawRect(beginX+(width/2)-2, beginY+height-4, 4, 4); // blokje middenonder
    g.drawRect(beginX+width-4, beginY+height-4, 4, 4); // blokje linksonder
  }
  // einde teken rectangle //
        
  // teken dragrectangle //
  if (dragrect == true) {
    px = (muisX-rectleft);
    py = (muisY-recttop);
    g.drawRect(px, py, width, height); // selectievak
    g.drawRect(px, py, 4, 4); // blokje linksboven
    g.drawRect(px+(width/2)-2, py, 4, 4); // blokje middenboven
    g.drawRect(px+width-4, py, 4, 4); // blokje rechtsboven
    g.drawRect(px, py+(height/2)-2, 4, 4); // blokje linksmidden
    g.drawRect(px+width-4, py+(height/2)-2, 4, 4); // blokje rechtsmidden   
    g.drawRect(px, py+height-4, 4, 4); // blokje linksonder
    g.drawRect(px+(width/2)-2, py+height-4, 4, 4); // blokje middenonder
    g.drawRect(px+width-4, py+height-4, 4, 4); // blokje linksonder
  }
  // einde dragrectangle //
        
        
  ///////// Weergave coordinaten ///////////////
  g.drawString("beginX: "+beginX, 225, 20); // X
  g.drawString("beginY: "+beginY, 225, 32); // Y
  g.drawString("breedte: "+width, 225, 44); // breedte
  g.drawString("lengte: "+height, 225, 56); // lengte
  g.drawString("currentX: "+currentX, 225, 68);
  g.drawString("currentY: "+currentY, 225, 80);
  g.drawString("startX: "+startX, 225, 92);
  g.drawString("startY: "+startY, 225, 104);
  ///////// Weergave coordinaten END ///////////
        
  // draw cropped image //
  if (this.cropImage != null) {
    g.drawImage(this.cropImage,300,0,this);
  }
  // einde cropped image //
}
    
public void paint(Graphics g) {
  paintcanvas();
}
    
public void mousePressed(MouseEvent e) { 
  muisX = e.getX();
  muisY = e.getY();
  if (muisX > beginX && muisX < beginX+width && muisY > beginY && muisY < beginY+height) {
    System.out.println("geklikt in rectangle");
    rectclicked = true;
    rectleft = muisX-beginX;
    recttop = muisY-beginY;
  } else {
    System.out.println("geklikt buiten rectangle");
    startX = e.getX();
    startY = e.getY();
    currentX = e.getX();
    currentY = e.getY();
    rectclicked = false;
    paintcanvas();
  }
}
    
public void mouseReleased(MouseEvent e) {
  if (dragrect == true) {
    startX = muisX-rectleft;
    startY = muisY-recttop;
    currentX = width+startX;
    currentY = height+startY;
    dragrect = false;   
  }
  dragMode = false;
  paintcanvas();
}
    
public void mouseDragged(MouseEvent e) {    
  if (rectclicked == true) {
    dragrect = true;
    muisX = e.getX();
    muisY = e.getY();
    paintcanvas();
  } else if (rectclicked == false) {
    dragMode = true;
    currentX = e.getX();
    currentY = e.getY();
    paintcanvas();  
  }
}
    
public void mouseMoved(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
    
public void actionPerformed(ActionEvent e) {
  if (width != 0 && height != 0) {
    this.cropImage=this.createImage(new FilteredImageSource(this.origImage.getSource(),new CropImageFilter(beginX,beginY,width,height)));
    System.out.println("breedte2:"+width);
    System.out.println("lengte2:"+height);
    double newheight = height*(75.0/width);
    int nh = (int)newheight;
    System.out.println("newheight:"+nh);
    this.cropImage=this.createImage(new FilteredImageSource(this.cropImage.getSource(),new AreaAveragingScaleFilter(75, nh)));
    tracker=new MediaTracker(this);
    tracker.addImage(this.cropImage,0);
    try {
      tracker.waitForID(0);
    } catch(InterruptedException ie) {
      ie.printStackTrace();
    }
  }
  paintcanvas();
}

}

  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
ik denk dat het weinig zin heeft om allerlei drawing/gui-code hier te posten, als je enkel een plaatje wilt posten naar een server. Het heeft dan ook weinig met elkaar te maken lijkt mij zo ;)
Maar nadat je een (sub)-plaatje gecropt hebt, kun dat .jpgje toch gewoon ftp-en naar de server?

Of lukt het niet om van een geselecteerde region, een .jpg-bestand te creeren? Als je dat wel lukt en dus dat bestand opslaat, dan is het plaatje toch gewoon al aanwezig op de server?

[ Voor 25% gewijzigd door vogeltje op 09-06-2005 13:14 ]

binnenkort een hele dikke casemod :P


  • vleesboom
  • Registratie: Augustus 2004
  • Laatst online: 28-11-2025
Het is inderdaad een flinke lap code.
Ik heb het vooral gepost zodat men de context van de applet ook kan begrijpen.

Het is me niet gelukt een .jpg bestand van het gecropte plaatje te maken en direct op de server te laten zetten. is dit mogelijk met alleen java? Is daar niet ook een server side script voor nodig?

Ik begreep dat java zelf niet op de server kan schrijven.

Verwijderd

Hmm, draag ik wat aan om te resizen, gaat het over croppen, nouja, voortaan beter lezen...

[ Voor 97% gewijzigd door Verwijderd op 09-06-2005 15:14 ]


Verwijderd

Java applets hebben inderdaad geen file access, maar wat eventueel wel kan is dat je die applet zoals eerder gezegd via ftp verbinding laat maken met de server (wel op een aparte account ivm veiligheid), en zo dat plaatje laat wegschrijven.

Verwijderd

Waarom niet via http-post? Dan is het immers voor php transparant en kun je gebruik maken van een geauthoriseerde gebruiker in de sessie.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

Kan iemand mij hiermee helpen?
Graag letterlijke code als dat lukt...
Dat lijkt zo nogal erg op een scriptrequest en die zien we hier liever niet. Zie ook P&W FAQ - Scriptrequests. Daarbij post je een veel te lange lap code.

Ga zelf eerst eens aan de slag om echt te proberen je probleem op te lossen ;) Als dat dan niet lukt geft dat niet, maar dan ben je waarschijnlijk wel in staat om alleen de relevante code te posten.

Je begint zelf al over een POST request. Je kan je image data posten naar een script op de server. Die vangt de image op en kan dat opslaan op de server. Hoe je dit precies oplost is een beetje afhankelijk van de mogelijkheden op de server. Info over hoe je dit kan doen is overigens prima te vinden met google ;)
Als je letterlijk de code wilt hebben hoe dit te doen dan zit je hier in Programming & Webscripting verkeerd.

[ Voor 104% gewijzigd door Creepy op 09-06-2005 17:28 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.