Java 시스템 아이콘추출
Java에서 지정된 파일의 아이콘을 png 형식의 이미지 파일로 추출하는 샘플 프로그램을 소개합니다. 지정하는 파일은 확장자 exe 등의 실행 파일이나, dll, xls, doc 등 무엇이든 추출할 수 있습니다.
비슷한 방법을 인터넷에서 여러가지 조사했는데, 눈에 띄지 않았습니다.
하지만 실로 간단하게 취득할 수 있는 방법을 발견했으므로 소개합니다.
또한, Chat & Messenger에서는이 방법을,스티커 메모에 파일을 첨부하는 기능에서 이용하고 있습니다.
샘플 프로그램 동작 확인
샘플 실행
※ jar 파일이 관련되어 있는 경우, 실행할 수 있습니다.
- 샘플 소스를 얻고 컴파일하고 실행하십시오.
- 기동하면 메인 윈도우가 열리므로, 추출하고 싶은 아이콘을 그대로 윈도우에 드래그&드롭 해 주세요.
- 원래 아인콘과 같은 위치에 png 형식의 이미지 파일이 출력됩니다.
샘플 프로그램 설명
Java로 아이콘을 추출하는 처리는, 이하의 방법으로 실현하고 있습니다.
-
Look & Feel을 Windows로 설정합니다.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - 드래그 앤 드롭으로 얻은 파일 javax.swing.JFileChooser.getIcon() 방법으로 javax.swing.Icon 객체로 변환합니다.
- javax.imageio.ImageIO.write() 메서드는 Icon 객체를 png 형식의 이미지 파일로 출력합니다.
샘플 프로그램
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
public class IconExtractor extends JFrame
implements DropTargetListener {
private JPanel jContentPane = null;
private JLabel jLabel = null;
private JFileChooser chooser;
public static void main(String[] args) {
IconExtractor extractor = new IconExtractor();
extractor.setVisible(true);
}
public IconExtractor() {
super();
try {
UIManager.setLookAndFeel (
UIManager.getSystemLookAndFeelClassName());
chooser = new JFileChooser();
} catch (Exception e) {
e.printStackTrace();
}
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("아이콘 추출");
this.setLocationRelativeTo (null);
this.setDefaultCloseOperation (EXIT_ON_CLOSE);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel = new JLabel();
jLabel.setText(“아이콘을 드래그하십시오.”);
jLabel.setBackground (Color.white);
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
jLabel.setOpaque(true);
새로운 DropTarget (jLabel,
DnDConstants.ACTION_COPY_OR_MOVE, this);
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(jLabel, BorderLayout.CENTER);
}
return jContentPane;
}
// — implements DropTargetListener ——————————-
public void drop (DropTargetDropEvent dtde) {
dtde.acceptDrop(DnDConstants.ACTION_MOVE);
try {
Transferable tran = dtde.getTransferable();
List fileList = (List) tran
.getTransferData(DataFlavor.javaFileListFlavor);
Iterator iterator = fileList.iterator();
while (iterator.hasNext()) {
File file = (File) iterator.next();
ImageIcon icon = (ImageIcon) chooser.getIcon(file);
String ext = file.getAbsoluteFile() + “.png”;
// 이미지 파일 저장
ImageIO.write((BufferedImage) icon.getImage(), “png”,
새로운 파일 (ext));
jLabel.setText(“<html>추출 완료<br>” + ext);
setIconImage(icon.getImage());
}
dtde.dropComplete(true);
} catch (Exception e) {
e.printStackTrace();
dtde.dropComplete(false);
}
}
public void dragEnter(DropTargetDragEvent e) {
}
public void dragOver (DropTargetDragEvent e) {
}
public void dropActionChanged (DropTargetDragEvent e) {
}
public void dragExit (DropTargetEvent e) {
}
}