diff --git a/.gitignore b/.gitignore index 9c247f1..4d7f0b4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /build/ /**/build/** /test.db +/out/ diff --git a/batik/build.gradle.kts b/batik/build.gradle.kts new file mode 100644 index 0000000..1770b18 --- /dev/null +++ b/batik/build.gradle.kts @@ -0,0 +1,16 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-java") +} + +dependencies { + // https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-rasterizer + implementation("org.apache.xmlgraphics:batik-rasterizer:1.14") + +} diff --git a/batik/src/main/java/kr/pe/elex/examples/Sample.java b/batik/src/main/java/kr/pe/elex/examples/Sample.java new file mode 100644 index 0000000..1bff27c --- /dev/null +++ b/batik/src/main/java/kr/pe/elex/examples/Sample.java @@ -0,0 +1,51 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import org.apache.batik.transcoder.TranscoderException; +import org.apache.batik.transcoder.TranscoderInput; +import org.apache.batik.transcoder.TranscoderOutput; +import org.apache.batik.transcoder.image.PNGTranscoder; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; + +public class Sample { + public static void main(String... args) throws IOException, TranscoderException { + toBufferedImage(); + } + + public static void toPNG() throws FileNotFoundException, TranscoderException { + PNGTranscoder transcoder = new PNGTranscoder(); + transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, 64f); + transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, 64f); + + TranscoderInput input = new TranscoderInput(Sample.class + .getResourceAsStream("/java.svg")); + TranscoderOutput output = new TranscoderOutput( + new FileOutputStream(new File("out/test_out.png"))); + transcoder.transcode(input, output); + + } + + public static void toBufferedImage() throws IOException, TranscoderException { + PNGTranscoder transcoder = new PNGTranscoder(); + transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, 64f); + transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, 64f); + + TranscoderInput input = new TranscoderInput(Sample.class + .getResourceAsStream("/java.svg")); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + TranscoderOutput output = new TranscoderOutput(os); + transcoder.transcode(input, output); + + BufferedImage out = ImageIO.read(new ByteArrayInputStream(os.toByteArray())); + ImageIO.write(out, "png", new File("out/test-buffered-image.png")); + } +} diff --git a/batik/src/main/resources/java.svg b/batik/src/main/resources/java.svg new file mode 100644 index 0000000..0c85456 --- /dev/null +++ b/batik/src/main/resources/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 3f83a15..72f9e56 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,11 +9,11 @@ rootProject.name = "java-examples" include( "json-web-token", "mockito", "mosquitto", "rabbit-mq", - "ssh", + "ssh", "batik", "webcam", "web-socket-servlet", "web-socket-client", "thread", "hibernate", "jdbc-sqlite", "xml", "jackson", "jsoup", "markdown", "network", "httpd", - "properties", + "properties", "mustache", "thymeleaf", "locale", "quartz", "sysinfo", "imaging" ) diff --git a/webcam/build.gradle.kts b/webcam/build.gradle.kts new file mode 100644 index 0000000..b15d0af --- /dev/null +++ b/webcam/build.gradle.kts @@ -0,0 +1,14 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-java") +} + +dependencies { + implementation("com.github.sarxos:webcam-capture:0.3.12") +} diff --git a/webcam/src/main/java/kr/pe/elex/examples/WebcamSample.java b/webcam/src/main/java/kr/pe/elex/examples/WebcamSample.java new file mode 100644 index 0000000..0b34fc1 --- /dev/null +++ b/webcam/src/main/java/kr/pe/elex/examples/WebcamSample.java @@ -0,0 +1,91 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import com.github.sarxos.webcam.Webcam; +import com.github.sarxos.webcam.WebcamPanel; +import com.github.sarxos.webcam.WebcamResolution; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class WebcamSample { + public static void main(String... args) { + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + JFrame jFrame = new JFrame("Web Cam"); + jFrame.setSize(800, 600); + jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + jFrame.setContentPane(new MyPanel()); + + jFrame.setVisible(true); + } + }); + } + + private static class MyPanel extends JPanel { + private Webcam webcam; + + MyPanel() { + super(); + init(); + } + + private void init() { + setLayout(new BorderLayout()); + + webcam = Webcam.getDefault(); + Dimension resolution = WebcamResolution.QVGA.getSize(); + webcam.setViewSize(resolution); + webcam.open(); + + WebcamPanel panel = new WebcamPanel(webcam); + panel.setFPSDisplayed(true); + panel.setAntialiasingEnabled(true); + panel.setSize(resolution); + + JButton btnCapture = new JButton("Capture"); + btnCapture.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + BufferedImage image = webcam.getImage(); + ImageIO.write(image, "jpg", new File("out/capture.jpg")); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + }); + JButton btnResolution = new JButton("Resolutions"); + btnResolution.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + for (Dimension item : webcam.getDevice().getResolutions()) { + System.out.println(item); + } + } + }); + + JToolBar jToolBar = new JToolBar(); + jToolBar.add(btnCapture); + jToolBar.add(btnResolution); + + add(panel, BorderLayout.CENTER); + add(jToolBar, BorderLayout.NORTH); + } + } +}