正文
java图片转手绘代码 java图片转字符画
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
如何用Java将一张图片素描处理
1、打开原图素材,按Ctrl + Shift + U 去色,然后把背景图层复制一层。
2、按Ctrl + I 把背景副本反相,图层混合模式改为“颜色减淡”。
3、执行:滤镜 其它 最少值,数值为1-2像素。
4、点击图层面板下面的图层样式按钮,添加图层样式选择“混合选项”。选择混合颜色带中的灰色,按住Alt 键盘,用鼠标拖动下一层的深色滑块的右半到合适位置。
5、新建一个图层,填充白色,加上图层蒙版,用黑色画笔把人物部分擦出来。确定后合并所有图层,完成最终效果。
如果不做去色,则可得到彩色线描。
如何使用java旋转图片
废话不多说直接上代码java图片转手绘代码:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Transparency;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
public class ImageChange {
public static InputStream rotateImg(BufferedImage image, int degree, Color bgcolor) throws IOException {
int iw = image.getWidth();//原始图象java图片转手绘代码的宽度
int ih = image.getHeight();//原始图象java图片转手绘代码的高度
int w = 0;
int h = 0;
int x = 0;
int y = 0;
degree = degree % 360;
if (degree 0)
degree = 360 + degree;//将角度转换到0-360度之间
double ang = Math.toRadians(degree);//将角度转为弧度
/**
*确定旋转后java图片转手绘代码的图象java图片转手绘代码的高度和宽度
*/
if (degree == 180 || degree == 0 || degree == 360) {
w = iw;
h = ih;
} else if (degree == 90 || degree == 270) {
w = ih;
h = iw;
} else {
int d = iw + ih;
w = (int) (d * Math.abs(Math.cos(ang)));
h = (int) (d * Math.abs(Math.sin(ang)));
}
x = (w / 2) - (iw / 2);//确定原点坐标
y = (h / 2) - (ih / 2);
BufferedImage rotatedImage = new BufferedImage(w, h, image.getType());
Graphics2D gs = (Graphics2D)rotatedImage.getGraphics();
if(bgcolor==null){
rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);
}else{
gs.setColor(bgcolor);
gs.fillRect(0, 0, w, h);//以给定颜色绘制旋转后图片的背景
}
AffineTransform at = new AffineTransform();
at.rotate(ang, w / 2, h / 2);//旋转图象
at.translate(x, y);
AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
op.filter(image, rotatedImage);
image = rotatedImage;
ByteArrayOutputStream byteOut= new ByteArrayOutputStream();
ImageOutputStream iamgeOut = ImageIO.createImageOutputStream(byteOut);
ImageIO.write(image, "png", iamgeOut);
InputStream inputStream = new ByteArrayInputStream(byteOut.toByteArray());
return inputStream;
}
}
利用java实现图片翻转的代码
重载渲染控件的paintComponent(Graphics
g)方法.
设你当前图像实例为img,已初始化,需要旋转的角度为ang
public
void
paintComponent(Graphics
g){
super.paintCompoent(g);
Graphics2D
g2d
=
(Graphics2D)g;
g2d.rotate(-angle);
g2d.drawImage(img,0,0,this.getWidth(),this.getHeight(),null);
}
Graphics,Graphics2D
类中有对当前描绘环境进行仿射变换的方法,包括translate,scale,rotate,也可以直接设置仿射变换矩阵,利用这点就可以根据所需要的实现方式来进行描绘.
怎么样用Java实现将一张图片转成字符画??
#首先在D盘写一个文件"temp.html"java图片转手绘代码,如下内容
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
html
head
title图片转文本/title
meta http-equiv="content-type" content="text/html; charset=gbk"
style type="text/css"
body {
font-family: 宋体; line-height: 0.8em; letter-spacing: 0px; font-size: 8px;
}
/style
/head
body
${content}
/body
/html
#在D盘放一个图片(放小一点java图片转手绘代码的)"a.jpg"
#运行如下JAVA代码:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.imageio.ImageIO;
public class Test {
/** 此处设置灰度字符,此处只用十个字符,可以设置更多 */
private static char[] cs = new char[] { '.', ',', '*', '+', '=', '', '$', '@', '#', ' ' };
public static void main(String[] args) throws IOException {
// 读取图片
BufferedImage bfedimage = ImageIO.read(new File("D:\\a.jpg"));
// 图片转字符串后的数组
char[][] css = new char[bfedimage.getWidth()][bfedimage.getHeight()];
for (int x = 0; x bfedimage.getWidth(); x++) {
for (int y = 0; y bfedimage.getHeight(); y++) {
int rgb = bfedimage.getRGB(x, y);
Color c = new Color(rgb);
// 得到灰度值
int cc = (c.getRed() + c.getGreen() + c.getBlue()) / 3;
css[x][y] = cs[(int) ((cc * 10 - 1) / 255)];
}
}
// 取得模板HTML
String temp = readFile(new File("D:\\temp.html"),"gbk");
StringBuffer sb = new StringBuffer();
// 开始拼接内容
for (int y = 0; y css[0].length; y++) {
for (int x = 0; x css.length; x++) {
sb.append(css[x][y]);
}
sb.append("\r\n");
}
System.out.println(sb.toString());
// 生成文件
String content = toHTML(sb.toString());
String filecontent = replaceStrAllNotBack(temp, "${content}", content);
writeFile(new File("D:\\content.html"), filecontent, "gbk");
}
public static String toHTML(String s) {
s = s.replaceAll("", "");
s = s.replaceAll(" ", " ");
s = s.replaceAll("", "");
s = s.replaceAll("", "");
s = s.replaceAll("\"", """);
s = s.replaceAll("\\\r\\\n", "br/");
s = s.replaceAll("\\\r", "br/");
s = s.replaceAll("\\\n", "br/");
return s;
}
public static String replaceStrAllNotBack(String str, String strSrc, String strDes) {
StringBuffer sb = new StringBuffer(str);
int index = 0;
while ((index = sb.indexOf(strSrc, index)) != -1) {
sb.replace(index, index + strSrc.length(), strDes);
index += strDes.length();
}
return sb.toString();
}
/**
* 读文件(使用默认编码)
*
* @param file
* @return 文件内容
* @throws IOException
*/
public static String readFile(File file, String charset) throws IOException {
InputStreamReader fr = new InputStreamReader(new FileInputStream(file), charset);
StringBuffer sb = new StringBuffer();
char[] bs = new char[1024];
int i = 0;
while ((i = fr.read(bs)) != -1) {
sb.append(bs, 0, i);
}
fr.close();
return sb.toString();
}
/**
* 写文件
*
* @param file
* @param string
* 字符串
* @param encoding
* 编码
* @return 文件大小
* @throws IOException
*/
public static int writeFile(File file, String string, String encoding) throws IOException {
FileOutputStream fos = new FileOutputStream(file);
try {
byte[] bs = string.getBytes(encoding);
fos.write(bs);
return bs.length;
} finally {
fos.close();
}
}
}
#打开"D:\content.html"文件看效果吧。
有什么问题可以联系我。
我想把一个黑白的线条的手绘图片转换成一个矩阵存储,黑用0,白用1,请问用java如何实现
import java.io.File;
import java.io.FileInputStream;
public class Test {
/**
* 将图片转成0/1矩阵
* @param imagePath
* @return
* @throws IOException
*/
public int[][] imgMtr(String imagePath) throws Exception {
java.awt.image.BufferedImage image =
javax.imageio.ImageIO.read(new FileInputStream(new File(imagePath)));
int w = image.getWidth();
int h = image.getHeight();
int[][] mtr = new int[h][w]; // 存储矩阵
for (int i = 0; i h; i++) {
for (int j = 0; j w; j++) {
int rgb = image.getRGB(j, i); //aRGB
// 依次检查R、G、B是否超过阈值
// 超过视为白色java图片转手绘代码,否则黑色
int r = (rgb 0x00ff0000) 16;
int g = (rgb 0x0000ff00) 8;
int b = (rgb 0x000000ff);
int a = 0xff / 2; //阈值java图片转手绘代码, 可根据需要设定
if (r a g a b a) {
mtr[i][j] = 1;
} else {
mtr[i][j] = 0;
}
}
}
return mtr;
}
public static void main(String[] args) throws Exception {
Test test = new Test();
int[][] result = test.imgMtr("F:\\hex.jpg");
for (int[] row : result) {
for (int col : row) {
System.out.print(col);
}
System.out.print("\n");
}
}
}
java图片转手绘代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java图片转字符画、java图片转手绘代码的信息别忘了在本站进行查找喔。