Java は画像処理と P ピクチャをどのように実装しますか?
准备阶段
原图(来源于网络)
PS处理后的模板图
待合成图片
图片合成
基本步骤
读取模板图和待合成图,调整待合成图的尺寸、旋转角度、亮度、对比度;
创建一个与模板图尺寸一致的空白图像;
创建
Graphics2D
对象,通过Graphics2D
对象的drawImage()
方法将待合成图和模板图绘制进空白图像的指定位置(需要注意图层顺序,先绘制待合成图,后绘制模板图);输出空白图像(合成后的图像)到本地。
代码
图片尺寸调整、旋转使用到了 Thumbnailator
, 需添加 Maven
依赖
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
/** * 横坐标 */ private static final int x = 457; /** * 纵坐标 */ private static final int y = 295; /** * 旋转角度 */ private static final double angle = 16; /** * 缩放比例 */ private static final double scale = 0.18; /** * 图片合成 * * @param imagePath 待合成的图片路径 * @param outPath 合成后的图片输出路径 * @throws IOException */ private static void synthesis(String imagePath, String outPath) throws IOException { // 模板图 BufferedImage template = ImageIO.read(new File("D:\\local\\images\\template.png")); // 待合成图 BufferedImage image = ImageIO.read(new File(imagePath)); // 调整待合成图的尺寸和旋转角度 image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage(); // 合成后的图 BufferedImage result = new BufferedImage(template.getWidth(), template.getHeight(), template.getType()); Graphics2D graphics2D = result.createGraphics(); // 先画待合成图,后画模板图,这样就能将待合成图放置在模板图的下层 graphics2D.drawImage(image, x, y, null); graphics2D.drawImage(template,0,0, null); graphics2D.dispose(); ImageIO.write(result, "png", new File(outPath)); }
运行代码
public static void main(String[] args) throws IOException { synthesis("D:\\local\\images\\weixin_payment_code.png", "D:\\local\\images\\result.png"); }
调整图片亮度、对比度
/** * 调整亮度、对比度 * * @param image */ private static void adjustBrightnessAndContrast(BufferedImage image) { int width = image.getWidth(); int height = image.getHeight(); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { Color color = new Color(image.getRGB(x, y)); int red = calculateColor(color.getRed()); int green = calculateColor(color.getGreen()); int blue = calculateColor(color.getBlue()); color = new Color(red, green, blue); image.setRGB(x, y, color.getRGB()); } } } /** * 亮度,取值范围[-1,1] */ private static final double BRIGHTNESS = 0; /** * 对比度,取值范围[-1,1] */ private static final double CONTRAST = -0.5; /** * 计算亮度、对比度颜色值 * * @param color 原颜色值 * @return 返回计算后的颜色值 */ private static int calculateColor(int color) { color = (int)((color - 127.5 * (1 - BRIGHTNESS)) * Math.tan((45 + 44 * CONTRAST) / 180 * Math.PI) + 127.5 * (1 + BRIGHTNESS)); return getColor(color); } /** * 获取范围内的颜色值,[0,255] * * @param color * @return */ private static int getColor(int color) { return color > 255 ? 255 : color < 0 ? 0 : color; }
在处理待合成图片的尺寸和旋转角度后调用 adjustBrightnessAndContrast()
方法调整亮度和对比度
... // 调整待合成图的尺寸和旋转角度 image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage(); // 调整待合成图片的亮度、对比度 adjustBrightnessAndContrast(image); ...
重新运行代码
以上がJava は画像処理と P ピクチャをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4
