Я делаю скриншот своего рабочего стола, и я хочу знать, как бы я пошел, если я хочу отправить его на сайт php, а затем отобразить его?
Я сделал это и никаких результатов о потоковой передаче.
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import javax.imageio.ImageIO;
public class Stream{
static public void captureScreen() throws Exception {
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRectangle = new Rectangle(screenSize);
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(screenRectangle);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ImageIO.write(image, "png", buffer);
byte[] data = buffer.toByteArray();
try {
// open a connection to the site
URL url = new URL("http://futuretechs.eu/stream.php");
URLConnection con = url.openConnection();
// activate the output
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
// send your parameters to your site
ps.print("image=" + encodeArray(data));
System.out.println(encodeArray(data));
// we have to get the input stream in order to actually send the request
con.getInputStream();
// close the print stream
ps.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try{
System.out.println("[ Stream Started ]");
while(true){
Thread.currentThread().sleep(100);
Stream.captureScreen();
}
// System.out.println("[ Stream Ended ]");
}
catch(Exception e)
{
e.printStackTrace();
}
}
static String encodeArray(byte[] in) throws IOException {
StringBuffer out = new StringBuffer();
out.append(Base64Coder.encode(in, 0, in.length));
return out.toString();
}
}
Как теперь я посылаю из java байт [] в php и играю в него?
Так было бы так
Клиентская программа Java отправляет на сайт php контент byte [], а затем php показывает его пользователю, который находится на сайте?
Спасибо!
РЕДАКТИРОВАТЬ: КОД ОБНОВЛЕНО
Что это за сайт, на который вы хотите загрузить содержимое скриншота? Этот сайт в интернете?
Есть разные подходы.
— У вас может быть страница php, которая ожидает HTTP-запрос POST, со снимком экрана в полезной нагрузке, в то время как сам сайт имеет php-модуль, работающий на этом сервере и запускаемый веб-запросом.
— Этот сервер, вероятно, поддерживает WebDav, тогда вы можете загрузить свой скриншот через HTTP-PUT и вызвать php-сайт с HTTP-GET (при отправке имени файла с вашими HTTP-GET-Args).
Трудно сказать, если мы не знаем php-сайт, это API и / или его поведение.
ну лучше конвертировать байты изображения в base64 перед отправкой в php
когда вы отправляете в php, вы можете использовать эту функцию imagecreatefromstring ($ image_data) для отображения
display.php
<?php
$image = $_POST['image'];
$data = base64_decode($image);
$im = imagecreatefromstring($data);
if ($im !== false) {
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
}
else {
echo 'An error occurred.';
}
?>
это должно работать с (PHP 4> = 4.0.4, PHP 5)
Дайте мне знать, если это работает 🙂
Редактировать :
Я не очень хорошо с Java, попробуйте ниже
Как спросил код Java
try {
// open a connection to the site
URL url = new URL("http://www.yourdomain.com/yourphpscript.php");
URLConnection con = url.openConnection();
// activate the output
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
// send your parameters to your site
ps.print("image=BASE64_ENCODED_STRING_HERE");
// we have to get the input stream in order to actually send the request
con.getInputStream();
// close the print stream
ps.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
или использовать HTTP-клиент в Java
HttpClient client = new HttpClient();
PostMethod method = new PostMethod("http://www.yourdomain.com/yourphpscript.php");
method.addParamezter("image","BASE64_ENCODED_STRING"); // or whatever
int statusCode = client.executeMethod(method);