экспорт картинок
public void exportPictures() {
final String mysqlTable = "tof_graphics";
final String sqlDropTable = "DROP TABLE IF EXISTS " + mysqlTable;
final String sqlCreateTable = " CREATE TABLE IF NOT EXISTS " + mysqlTable + " (" +
"article_id int(11), " +
"image VARCHAR(100)" +
") ENGINE=MYISAM DEFAULT CHARSET=utf8";
final String[] sqlIndexes = {
"ALTER TABLE " + mysqlTable + " ADD INDEX (article_id)"
};
Statement st;
Statement mysqlSt;
try {
System.out.println("Export pictures");
st = connection.createStatement();
ResultSet result = st.executeQuery("SELECT LGA_ART_ID, GRA_ID, GRA_TAB_NR, GRA_GRD_ID, DOC_EXTENSION, GRA_LNG_ID FROM TOF_LINK_GRA_ART, TOF_GRAPHICS, TOF_DOC_TYPES WHERE DOC_TYPE=GRA_DOC_TYPE AND LGA_GRA_ID=GRA_ID AND GRA_TAB_NR IS NOT NULL ORDER BY GRA_TAB_NR");
ResultSetMetaData metaResult = result.getMetaData();
mysqlSt = mysqlConnection.createStatement();
mysqlSt.executeUpdate(sqlDropTable);
mysqlSt = mysqlConnection.createStatement();
mysqlSt.executeUpdate(sqlCreateTable);
for (String sql : sqlIndexes) {
mysqlSt = mysqlConnection.createStatement();
mysqlSt.executeUpdate(sql);
}
int count = 0;
ArrayList<Integer> tableNumber = new ArrayList<Integer>();
ArrayList<Integer> ids = new ArrayList<Integer>();
ArrayList<Integer> articles = new ArrayList<Integer>();
while (result.next()) {
tableNumber.add(count, result.getInt(3));
ids.add(count, result.getInt(4));
articles.add(count, result.getInt(1));
count++;
System.out.println(count);
}
int limit = 1000;
String sql = "INSERT INTO " + mysqlTable + " VALUES (?, ?)";
PreparedStatement ps = mysqlConnection.prepareStatement(sql);
mysqlConnection.setAutoCommit(false);
for (int i = 0; i < ids.size(); i++) {
ps.setLong(1, articles.get(i));
System.out.println(tableNumber.get(i)+ "/" + ids.get(i) + ".jpg");
ps.setString(2, tableNumber.get(i)+ "/" + ids.get(i) + ".jpg");
ps.addBatch();
if (i % 5000 == 4500) {
System.out.println(i);
ps.executeBatch();
mysqlConnection.commit();
}
}
ps.executeBatch();
mysqlConnection.commit();
ps.close();
for (int i = 0; i < ids.size(); i++) {
try {
OutputStream output = null;
try {
File dir = new File("/Users/leo/images/" + tableNumber.get(i)+ "/");
if (!dir.exists()) {
dir.mkdir();
}
File file = new File("/Users/leo/images/" + tableNumber.get(i)+ "/" + ids.get(i) + ".jpg");
System.out.print(i + " " +tableNumber.get(i)+ "-" + ids.get(i));
if (file.exists()) {
System.out.println(" - skip");
;
}
System.out.println(" - write");
Statement st3 = connection.createStatement();
String sql = "SELECT GRD_GRAPHIC FROM TOF_GRA_DATA_" + tableNumber.get(i) + " WHERE GRD_ID=" + ids.get(i);
ResultSet result2 = st3.executeQuery(sql);
result2.next();
byte[] data = result2.getBytes(1);
output = new BufferedOutputStream(new FileOutputStream(file));
output.write(data);
output.close();
this.convertImage("/Users/leo/images/" + tableNumber.get(i)+ "/" + ids.get(i) + ".jpg");
} catch(FileNotFoundException ex){
ex.printStackTrace();
}
} catch(IOException ex){
ex.printStackTrace();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
Конвертация из в JPEG JPEG2000
public boolean convertImage(String path) {
try {
Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("JPEG2000");
ImageReader reader = iter.next();
if(reader == null) {
System.out.println("Could not locate any Readers for the JPEG 2000 format image.");
return true;
} else {
// System.out.println(reader.getFormatName());
}
BufferedImage image = null;
image = ImageIO.read(new File(path));
File outputFile = new File(path);
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // Needed see javadoc
param.setCompressionQuality(0.9F); // Highest quality
writer.setOutput(ImageIO.createImageOutputStream(outputFile));
writer.write(null, new IIOImage(image, null, null), param);
writer.dispose();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}