Copy kode kodenya sebagai berikut:
paket com.blogs.image;
impor java.awt.AlphaComposite;
impor java.awt.Color;
impor java.awt.Font;
impor java.awt.Graphics2D;
impor java.awt.Gambar;
impor java.awt.RenderingHints;
impor java.awt.image.BufferedImage;
impor java.io.File;
impor java.io.FileOutputStream;
impor java.io.InputStream;
impor java.io.OutputStream;
impor javax.imageio.ImageIO;
impor javax.swing.ImageIcon;
/**
* Tanda air gambar
*/
kelas publik ImageUtil {
/**
* @param argumen
*/
public static void main(String[] args) {
String srcImgPath = "e:/2.png";
String iconPath = "e://logo.jpg";
String targetPath = "e:/3.jpg";
//Tambahkan tanda air ke gambar
ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath, targerPath, 0, 0,
, 0,1f);
//Tambahkan tanda air ke gambar, rotasi tanda air -45
// ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath,
// targetPath2, -45);
}
/**
* Tambahkan tanda air ke gambar dan atur sudut rotasi gambar tanda air
*
* @param iconPath
*Jalur gambar tanda air
* @param srcImgPath
* Jalur gambar sumber
* @param targetPath
* Jalur gambar target
* @param derajat
* Sudut rotasi gambar tanda air
* @param lebar
* Lebar (dibandingkan dengan kiri)
* @param tinggi
* Tinggi (dibandingkan dengan atas)
* @param kejelasan
* Semakin dekat nilai transparansi (angka kurang dari 1) ke 0, maka semakin transparan
*/
public static void waterMarkImageByIcon(String iconPath, String srcImgPath,
String targerPath, Derajat bilangan bulat, Lebar bilangan bulat, Tinggi bilangan bulat,
kejernihan mengambang) {
Aliran Keluaran os = nol;
mencoba {
Gambar srcImg = ImageIO.read(File baru(srcImgPath));
System.out.println("lebar:" + srcImg.getWidth(null));
System.out.println("tinggi:" + srcImg.getHeight(null));
BufferedImage buffImg = BufferedImage baru(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
//Dapatkan objek kuas
// Grafik g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
//Mengatur pemrosesan tepi bergerigi untuk segmen garis
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.gambargambar(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Gambar.SCALE_SMOOTH), 0, 0,
batal);
if (null != derajat) {
//Atur rotasi tanda air
g.rotate(Matematika.toRadians(derajat),
(ganda) buffImg.getWidth() / 2,
(ganda) buffImg.getHeight() / 2);
}
//Jalur gambar watermark biasanya berupa gif atau png, sehingga transparansinya dapat diatur.
ImageIcon imgIcon = ImageIcon baru(iconPath);
// Ambil objek Gambar.
Gambar img = imgIcon.getImage();
float alpha = kejelasan; // transparansi
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alfa));
//Menunjukkan lokasi gambar watermark
g.drawImage(img, lebar, tinggi, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
g.buang();
os = FileOutputStream baru(targerPath);
// Hasilkan gambar
ImageIO.write(buffImg, "JPG", os);
System.out.println("Penambahan gambar watermark selesai!");
} tangkapan (Pengecualian e) {
e.printStackTrace();
} Akhirnya {
mencoba {
jika (nol != os)
os.close();
} tangkapan (Pengecualian e) {
e.printStackTrace();
}
}
}
/**
* Tambahkan tanda air ke gambar dan atur sudut rotasi gambar tanda air
*
* @param logoTeks
* Teks tanda air
* @param srcImgPath
* Jalur gambar sumber
* @param targetPath
* Jalur gambar target
* @param derajat
* Sudut rotasi gambar tanda air
* @param lebar
* Lebar (dibandingkan dengan kiri)
* @param tinggi
* Tinggi (dibandingkan dengan atas)
* @param kejelasan
* Semakin dekat nilai transparansi (angka kurang dari 1) ke 0, maka semakin transparan
*/
public static void waterMarkByText(String logoText, String srcImgPath,
String targerPath, Derajat bilangan bulat, Lebar bilangan bulat, Tinggi bilangan bulat,
Kejernihan mengambang) {
//Jalur gambar utama
InputStream adalah = nol;
Aliran Keluaran os = nol;
mencoba {
Gambar srcImg = ImageIO.read(File baru(srcImgPath));
BufferedImage buffImg = BufferedImage baru(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
//Dapatkan objek kuas
// Grafik g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
//Mengatur pemrosesan tepi bergerigi untuk segmen garis
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.gambargambar(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Gambar.SCALE_SMOOTH), 0, 0,
batal);
if (null != derajat) {
//Atur rotasi tanda air
g.rotate(Matematika.toRadians(derajat),
(ganda) buffImg.getWidth() / 2,
(ganda) buffImg.getHeight() / 2);
}
//Atur warna
g.setColor(Warna.merah);
//Setel Font
g.setFont(Font baru("宋体", Font.BOLD, 30));
float alpha = kejelasan;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alfa));
// Parameter pertama -> isi pengaturan, dua parameter berikutnya -> posisi koordinat (x, y) teks pada gambar.
g.drawString(logoTeks, lebar, tinggi);
g.buang();
os = FileOutputStream baru(targerPath);
// Hasilkan gambar
ImageIO.write(buffImg, "JPG", os);
System.out.println("Tambahkan teks tanda air selesai!");
} tangkapan (Pengecualian e) {
e.printStackTrace();
} Akhirnya {
mencoba {
jika (nol != adalah)
adalah.close();
} tangkapan (Pengecualian e) {
e.printStackTrace();
}
mencoba {
jika (nol != os)
os.close();
} tangkapan (Pengecualian e) {
e.printStackTrace();
}
}
}
}
Ada juga kode penskalaan gambar:
Copy kode kodenya sebagai berikut:
/**
* Penskalaan gambar (gambar diskalakan ke ukuran yang ditentukan secara proporsional, dan bagian yang kosong diisi dengan warna putih)
*
* @param srcPath
* Jalur gambar sumber
* @param jalur tujuan
* Jalur gambar setelah penskalaan
*/
public static void zoomImage(String srcPath, String destPath, int destHeight, int destWidth) {
mencoba {
BufferedImage srcBufferedImage = ImageIO.read(File baru(srcPath));
int imgLebar = Lebar tujuan;
int imgTinggi = Tinggi tujuan;
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
jika (srcHeight >= srcWidth) {
imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
} kalau tidak {
imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
}
BufferedImage destBufferedImage = BufferedImage baru(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D grafis2D = destBufferedImage.createGraphics();
grafis2D.setBackground(Warna.PUTIH);
grafis2D.clearRect(0, 0, destWidth, destHeight);
grafis2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
grafis2D.buang();
ImageIO.write(destBufferedImage, "JPEG", File baru(destPath));
} tangkapan (IOException e) {
e.printStackTrace();
}
}