Я должен выбрать определенный фрагмент изображения, который находится в WebView, и обрезать изображение и сохранить обрезанное изображение в другое место, а также сохранить основное изображение, и я также хочу повернуть изображение на определенный угол в Интернетевид изображения.
Я попробовал этот код, чтобы дать ниже.
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.sun.javafx.application.PlatformImpl;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.SplitPane;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Rectangle;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class MediaMonitoring extends Application {
public static void main(String[] args) {
Application.launch(args);
}
private static WebView mainWebView;
private static WebEngine webEngine;
private static WebView imageWebView;
private static WebView detailWebView;
private static Scene mainScene;
private static Scene scene;
@Override
public void start(Stage primaryStage) throws Exception {
PlatformImpl.startup(() -> {
mainWebView = new WebView();
SplitPane mainSplitPane = new SplitPane();
SplitPane imageSplitPane = new SplitPane();
SplitPane detailSplitPane = new SplitPane();
detailSplitPane.setOrientation(Orientation.VERTICAL);
imageSplitPane.getItems().add(0, mainWebView);
scene = new Scene(imageSplitPane);
webEngine = mainWebView.getEngine();
webEngine.setJavaScriptEnabled(true);
imageWebView = new WebView();
detailWebView = new WebView();
mainScene = new Scene(mainSplitPane);
imageWebView.addEventFilter(KeyEvent.KEY_RELEASED, (KeyEvent e) -> {
if (e.getCode() == KeyCode.ADD || e.getCode() == KeyCode.EQUALS || e.getCode() == KeyCode.PLUS) {
imageWebView.setZoom(imageWebView.getZoom() * 1.1);
} else if (e.getCode() == KeyCode.SUBTRACT || e.getCode() == KeyCode.MINUS) {
imageWebView.setZoom(imageWebView.getZoom() / 1.1);
}
});
Rectangle rectangle = new Rectangle(0, 0, 0, 0);
rectangle.setVisible(true);
imageWebView.addEventFilter(MouseEvent.ANY, (MouseEvent mouseEvent) -> {
System.out.println(mouseEvent.getEventType() + "CLicking >>>>>>>>>>>>");
if (mouseEvent.getEventType() == MouseEvent.MOUSE_CLICKED) {
rectangle.setVisible(true);
rectangle.setTranslateX(mouseEvent.getX());
rectangle.setTranslateY(mouseEvent.getY());
}
if (mouseEvent.getEventType() == MouseEvent.MOUSE_MOVED && rectangle.isVisible()) {
rectangle.setWidth(mouseEvent.getX() - rectangle.getTranslateX());
rectangle.setHeight(mouseEvent.getY() - rectangle.getTranslateY());
}
if (mouseEvent.getEventType() == MouseEvent.MOUSE_RELEASED)
rectangle.setVisible(true);
/*
* Pane pane = new Pane(imageWebView, rectangle); final Scene scene1 = new
* Scene(pane, 400, 300);
*
*
* if (!imageSplitPane.getItems().isEmpty())
* imageSplitPane.getItems().remove(0);
*
*
* imageSplitPane.getItems().add(0,scene1.getFocusOwner());
*/
//primaryStage.setScene(scene1);
//primaryStage.show();
//mainScene
System.err.printf("X: %.2f, Y: %.2f, Width: %.2f, Height: %.2f%n", rectangle.getX(), rectangle.getY(),
rectangle.getWidth(), rectangle.getHeight());
});
webEngine.getLoadWorker().stateProperty()
.addListener((ObservableValue<? extends State> observable, State oldValue, State newValue) -> {
primaryStage.setTitle(webEngine.getLocation());
if (newValue == Worker.State.SUCCEEDED
&& mainWebView.getEngine().getLoadWorker().getState() == Worker.State.SUCCEEDED) {
storeDetail(webEngine);
}
if (newValue == Worker.State.SCHEDULED) {
Platform.runLater(() -> showMainScreen(webEngine.getLocation(), imageSplitPane,
mainSplitPane, detailSplitPane, mainScene, primaryStage));
}
});
webEngine.load("http://pmmstest.ankiti.net/");
primaryStage.setScene(scene);
});
primaryStage.show();
}
static void showMainScreen(String location, SplitPane imageSplitPane, SplitPane mainSplitPane,
SplitPane detailSplitPane, Scene mainScene, Stage primaryStage) {
if (location.contains("img")) {
webEngine.getLoadWorker().cancel();
if (location.matches("(.*)img=(.*)")) {
int n = location.indexOf("img=");
int len = location.length();
String imageUrl = "file:" + location.substring(n + 4, len).split("&")[0];
imageWebView.getEngine().load(imageUrl);
if (location.matches("(.*)target=wb2(.*)")) {
int n1 = location.indexOf("target=wb2");
String detailUrl = "" + location.substring(0, n1 + 10);
detailWebView.getEngine().load(detailUrl);
}
if (!imageSplitPane.getItems().isEmpty())
imageSplitPane.getItems().remove(0);
if (mainSplitPane.getItems().size() >= 2)
mainSplitPane.getItems().remove(0, 2);
if (detailSplitPane.getItems().size() >= 2)
detailSplitPane.getItems().remove(0, 2);
imageSplitPane.getItems().add(0, imageWebView);
imageWebView.setZoom(1.5);
detailSplitPane.getItems().add(0, mainWebView);
detailSplitPane.getItems().add(1, detailWebView);
mainSplitPane.getItems().add(0, imageSplitPane);
mainSplitPane.getItems().add(1, detailSplitPane);
primaryStage.setScene(mainScene);
}
}
}
static void storeDetail(WebEngine webEngine) {
if (webEngine.getLocation().contains("noob=1&noshell=1&ini=")) {
int n4 = webEngine.getLocation().indexOf("ini=");
int n5 = webEngine.getLocation().indexOf("&output_format=html");
String find4 = webEngine.getLocation().substring(n4 + 4, n5);
String html = (String) webEngine.executeScript("document.documentElement.innerText");
try {
System.out.write(html.getBytes(StandardCharsets.UTF_8));
} catch (IOException ex) {
Logger.getLogger(SwingFXWebView.class.getName()).log(Level.SEVERE, null, ex);
}
String html1 = html.replace('|', '\n');
String h1 = html1.replaceAll("\n", "\r\n");
String path = "C:/temp";
path = path + "/";
File newFile = new File(path + find4 + ".ini");
try {
newFile.createNewFile();
if (newFile.exists()) {
newFile.delete();
}
try (FileWriter writer = new FileWriter(newFile, true)) {
writer.write(h1);
writer.flush();
} catch (IOException ex) {
Logger.getLogger(SwingFXWebView.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(SwingFXWebView.class.getName()).log(Level.SEVERE, null, ex);
}
if (html.contains("date_data_path=")) {
storeDateData(html);
}
}
}
static void storeDateData(String html) {
int n6 = html.indexOf("date_data_path=");
int len1 = html.length();
String find2 = html.substring(n6 + 15, len1 - 1);
String pathname = "C:";
String cuts = "cuts";
pathname += find2 + "/" + cuts;
File directory = new File(pathname);
if (!directory.exists()) {
directory.mkdirs();
}
String pathname1 = "C:";
String db = "db";
pathname1 += find2 + "/" + db;
File directory1 = new File(pathname1);
if (!directory1.exists()) {
directory1.mkdirs();
}
String pathname2 = "C:";
String ocr = "ocr";
pathname2 += find2 + "/" + ocr;
File directory2 = new File(pathname2);
if (!directory2.exists()) {
directory2.mkdirs();
}
String pathname3 = "C:";
String output = "output";
pathname3 += find2 + "/" + output;
File directory3 = new File(pathname3);
if (!directory3.exists()) {
directory3.mkdirs();
}
String pathname4 = "C:";
String scans = "scans";
pathname4 += find2 + "/" + scans;
File directory4 = new File(pathname4);
if (!directory4.exists()) {
directory4.mkdirs();
}
}
}
Используя этот код, я получаю координату мыши, но я не могу нарисовать прямоугольник на изображении.