Skip to content

Instantly share code, notes, and snippets.

@mcihad
Created October 23, 2019 05:26
Show Gist options
  • Save mcihad/60a5ed00e281db7428b6b28bce45caa8 to your computer and use it in GitHub Desktop.
Save mcihad/60a5ed00e281db7428b6b28bce45caa8 to your computer and use it in GitHub Desktop.
Resim boyutlandırma java
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileNameExtensionFilter;
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;
/**
* @author Cihad GÜNDOĞDU
*/
class BufferedImagePanel extends JPanel {
private BufferedImage image;
public void setImage(BufferedImage image) {
this.image = image;
}
private BufferedImage getImage() {
return image;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D graph = (Graphics2D) g;
if (getImage() != null) {
graph.drawImage(getImage(), 0, 0, null);
}
}
}
public class ResizeImageApp extends JFrame {
//Büyütme oran
private int scaleFactor = 1;
private File file;
private BufferedImagePanel imagePanel;
public ResizeImageApp() {
initUI();
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Resim Boyutlandır");
}
private void initUI() {
setLayout(new BorderLayout());
JPanel toolPanel = new JPanel();
toolPanel.setLayout(new FlowLayout());
JSlider slider = new JSlider();
slider.setMinimum(1);
slider.setMaximum(5);
slider.setValue(1);
slider.setEnabled(false);
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent changeEvent) {
//scale factor değerini sliderin değeriyle eşitle
setScaleFactor(slider.getValue());
try {
rescaleImage();
} catch (IOException e) {
e.printStackTrace();
}
}
});
JButton selectFileButton = new JButton("Resim Seçiniz");
selectFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
JFileChooser openDialog = new JFileChooser();
//varsayılan olarak tüm dosya türlerini seçebiliriz. İptal ediyoruz bunu
openDialog.setAcceptAllFileFilterUsed(false);
//sadece jpg,jpeg uzantılı dosyaları seç
//PNG resimlerde Alpha kalanlı da olduğu için biraz farklı işlemek gerekiyor. Onu seçmedim hocam.
openDialog.addChoosableFileFilter(new FileNameExtensionFilter("Resim Dosyası", "jpg", "jpeg"));
int result = openDialog.showDialog(null, "Resim seç");
if (result == JFileChooser.APPROVE_OPTION) {
slider.setEnabled(true);
setFile(openDialog.getSelectedFile());
try {
rescaleImage();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
toolPanel.add(selectFileButton);
toolPanel.add(slider);
imagePanel = new BufferedImagePanel();
add(toolPanel, BorderLayout.PAGE_START);
add(imagePanel, BorderLayout.CENTER);
}
/**
* @throws IOException
* Boyutlandırma işlemi burada yapılıyor
*/
private void rescaleImage() throws IOException {
BufferedImage resim = ImageIO.read(getFile());
//scaleFactor değerine göre kaç kat büyük resim olacak
//Ayrıca resimde sadece RGB kanalları olacak ALPHA kanalı olmayacak
//Eğer ALPHA da olacaksa TYPE_INT_ARGB olacak ama resim formatı PNG olmalı
BufferedImage newResim = new BufferedImage(resim.getWidth() * getScaleFactor(), resim.getHeight() * getScaleFactor(), BufferedImage.TYPE_INT_RGB);
//satırlar ve sütünlar arasında dön
for (int x = 0; x < resim.getWidth(); x++) {
for (int y = 0; y < resim.getHeight(); y++) {
int color = resim.getRGB(x, y);
for (int i = 0; i < getScaleFactor(); i++) {
//scaleFactor değeri kadar ilave x eksenine aynı renkte piksel ekle
newResim.setRGB(x * getScaleFactor() + i, y * getScaleFactor(), color);
for (int j = 0; j < getScaleFactor(); j++) {
//x eksenine eklenen tüm piksellerin altına aynı boyutta aşağı doğru pixel ekle
newResim.setRGB(x * getScaleFactor() + i, y * getScaleFactor() + j, color);
}
}
}
}
//imaj panelin resimini değiştir veya resim ata
imagePanel.setImage(newResim);
//paneli yeniden çizeren paintComponent metodun çağır
imagePanel.repaint();
}
public int getScaleFactor() {
return scaleFactor;
}
public void setScaleFactor(int scaleFactor) {
this.scaleFactor = scaleFactor;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> new ResizeImageApp().setVisible(true));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment