次のようにコードをコピーします。
パッケージcom.blogs.image;
java.awt.AlphaCompositeをインポートします。
java.awt.Colorをインポートします。
java.awt.Fontをインポートします。
java.awt.Graphics2Dをインポートします。
java.awt.Imageをインポートします。
java.awt.RenderingHintsをインポートします。
インポート java.awt.image.BufferedImage;
java.io.ファイルをインポートします。
java.io.FileOutputStreamをインポートします。
java.io.InputStreamをインポートします。
java.io.OutputStreamをインポートします。
インポートjavax.imageio.ImageIO;
インポート javax.swing.ImageIcon;
/**
* 画像の透かし
*/
パブリック クラス ImageUtil {
/**
* @param 引数
*/
public static void main(String[] args) {
文字列 srcImgPath = "e:/2.png";
文字列 iconPath = "e://logo.jpg";
文字列ターゲットパス = "e:/3.jpg";
//画像にウォーターマークを追加します
ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath, targetPath, 0, 0,
、0.1f);
//画像に透かしを追加、透かしの回転 -45
// ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath,
// ターゲットパス2, -45);
}
/**
* 画像に透かしを追加し、透かし画像の回転角度を設定します
*
* @paramアイコンパス
*透かし画像パス
* @param srcImgPath
* ソース画像のパス
* @paramターゲットパス
* ターゲット画像パス
* @param度
* 透かし画像の回転角度
* @パラメータ幅
※幅(左と比較)
* @パラメータの高さ
※高さ(上面との比較)
* @param の明確さ
※透明度(1未満の数字)が0に近づくほど透明になります。
*/
public static void WaterMarkImageByIcon(String iconPath, String srcImgPath,
文字列 targerPath、整数の次数、整数の幅、整数の高さ、
フロートの明瞭度) {
OutputStream os = null;
試す {
画像 srcImg = ImageIO.read(新しいファイル(srcImgPath));
System.out.println("width:" + srcImg.getWidth(null));
System.out.println("高さ:" + srcImg.getHeight(null));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null)、BufferedImage.TYPE_INT_RGB);
//ブラシオブジェクトを取得する
// グラフィックス g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
//線分のギザギザ処理を設定
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null)、Image.SCALE_SMOOTH)、0、0、
null);
if (null != 度) {
//ウォーターマークの回転を設定する
g.rotate(Math.toラジアン(度),
(ダブル) buffImg.getWidth() / 2、
(ダブル) buffImg.getHeight() / 2);
}
//透かし画像のパス。透かしは通常 gif または png なので、透明度を設定できます。
ImageIcon imgIcon = 新しい ImageIcon(iconPath);
// 画像オブジェクトを取得します。
画像 img = imgIcon.getImage();
float alpha = 透明度;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
アルファ));
//ウォーターマーク画像の位置を示します
g.drawImage(img, width, height, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
g.dispose();
os = 新しい FileOutputStream(targerPath);
// 画像を生成する
ImageIO.write(buffImg, "JPG", os);
System.out.println("透かし画像の追加が完了しました!");
} catch (例外 e) {
e.printStackTrace();
} ついに {
試す {
if (null != os)
os.close();
} catch (例外 e) {
e.printStackTrace();
}
}
}
/**
* 画像に透かしを追加し、透かし画像の回転角度を設定します
*
* @param ロゴテキスト
* 透かしテキスト
* @param srcImgPath
* ソース画像のパス
* @paramターゲットパス
* ターゲット画像パス
* @param度
* 透かし画像の回転角度
* @パラメータ幅
※幅(左と比較)
* @パラメータの高さ
※高さ(上面との比較)
* @param の明確さ
※透明度(1未満の数字)が0に近づくほど透明になります。
*/
public static void WaterMarkByText(String logoText, String srcImgPath,
文字列 targerPath、整数の次数、整数の幅、整数の高さ、
フロートの透明度) {
//メイン画像のパス
入力ストリームは = null;
OutputStream os = null;
試す {
画像 srcImg = ImageIO.read(新しいファイル(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null)、BufferedImage.TYPE_INT_RGB);
//ブラシオブジェクトを取得する
// グラフィックス g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
//線分のギザギザ処理を設定
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null)、Image.SCALE_SMOOTH)、0、0、
null);
if (null != 度) {
//ウォーターマークの回転を設定する
g.rotate(Math.toラジアン(度),
(ダブル) buffImg.getWidth() / 2、
(ダブル) buffImg.getHeight() / 2);
}
//色を設定する
g.setColor(Color.red);
//フォントを設定する
g.setFont(new Font("宋体", Font.BOLD, 30));
float alpha = 明瞭度;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
アルファ));
// 最初のパラメータ -> 設定内容、次の 2 つのパラメータ -> 画像上の文字の座標位置 (x, y)。
g.drawString(ロゴテキスト, 幅, 高さ);
g.dispose();
os = 新しい FileOutputStream(targerPath);
// 画像を生成する
ImageIO.write(buffImg, "JPG", os);
System.out.println("透かしテキストの追加が完了しました!");
} catch (例外 e) {
e.printStackTrace();
} ついに {
試す {
if (null != である)
is.close();
} catch (例外 e) {
e.printStackTrace();
}
試す {
if (null != os)
os.close();
} catch (例外 e) {
e.printStackTrace();
}
}
}
}
画像のスケーリング コードもあります。
次のようにコードをコピーします。
/**
* 画像の拡大縮小(画像を指定されたサイズに比例して拡大縮小し、空白部分を白で塗りつぶします)
*
* @param srcPath
* ソース画像のパス
* @param destPath
※拡大縮小後の画像パス
*/
public static voidzoomImage(String srcPath, String destPath, int destHeight, int destWidth) {
試す {
BufferedImage srcBufferedImage = ImageIO.read(new File(srcPath));
int imgWidth = destWidth;
int imgHeight = destHeight;
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
if (srcHeight >= srcWidth) {
imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
} それ以外 {
imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
}
BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = destBufferedImage.createGraphics();
graphics2D.setBackground(Color.WHITE);
graphics2D.clearRect(0, 0, destWidth, destHeight);
graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
グラフィックス2D.dispose();
ImageIO.write(destBufferedImage, "JPEG", 新しいファイル(destPath));
} キャッチ (IOException e) {
e.printStackTrace();
}
}