java图片拼接
㈠ java8中如何将多个集合的数据拼接成一个统一的流
java8中stream的提供了一个拼接流的方法Stream.concat,可以将两个stream拼友嫌接成一个stream, 保持了两个stream中的元素顺序。
那么如果我们需要对多个集合中的元素拼接成一个stream来统一处理,可以怎么做呢?
比如有三个Collection<String> c1, c2, c3.
方法一,使用Stream.concat方法来拼接,可以使用一个for循环来处理。
private static Stream<String> concat1(List<Collection<String>> collections) {
Stream result = Stream.empty();
for (Collection<String> strings : collections) {
result = Stream.concat(result, strings.stream());
}
return result;
}
方法二,使用flatMap方法,将集合变成stream, 再压平
private static Stream<String> concat2(List<Collection<String>> collections) {
return collections.stream()
.flatMap(Collection::stream);
}
对于不同集合类型的数据,如何做成一个统一的流?还是可以使用flatMap方法来做
方法三:
private static Stream<String> concat3(List<String> s1,String[] s2, Set<String> s3) {
return Stream.of(s1.stream(), Arrays.stream(s2), s3.stream())
.flatMap(Function.identity());
}
方法三和方法二相比,可以使用不同类型的集合类型来拼接流,方法二在拥有共同基类的情况下使用会逗告枣显山拆得简洁很多。
㈡ 如何用Java实现两个文件的拼接
如何用Java实现两个文件的拼接
String类的方法:
①配枯橡利用运算符"+"
②public String concat(String str)进行字符串的拼接操作
StringBuffer的方法:
①public StringBuffer append(String str)将str添加到当前字符串缓冲区的字符序列的末尾
②public StringBuffer insert(int offset,String str)在当前字符串缓冲区的字符序列的下标
索引offset插入培旁str。如果offset等于旧长度,则str添加在字符串缓冲区的尾部败氏
㈢ 求一个用java编写的图片拼接程序(全景图拼接问题)
最近木有时间上网,偶然看到该题,没有现成的程序,给您个思路吧,图片在程序中本身是存的是一个二蠢岩进制矩阵,如要拼接只需将两张图片转换成两带芹御个矩阵然后合并首仔成一个大矩阵即可,从哪个像素开始都可以从矩阵中得到数据,切割图片亦是如此,计算一下便可。不知对您是否有帮助
㈣ 怎么样用Java实现将一张图片转成字符画
#首先在D盘写一个文件"temp.html",如下内容
<!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盘放一个图片(放小一点的)"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"文件看效果吧。
有什么问题可以联系我。
㈤ java实现多个tif文件图片拼接
publicstaticvoidmany2one(List<String>bookFilePaths,StringtoPath,StringdistFileName){
if(bookFilePaths!=null&&bookFilePaths.size()>0){
File[]files判滚租=newFile[bookFilePaths.size()];
for(inti=0;i<bookFilePaths.size();i++){
files[i]=newFile(bookFilePaths.get(i));
}
if(files!=null&&files.length>0){
try{
ArrayListpages=newArrayList(files.length-1);
FileSeekableStream[]stream=newFileSeekableStream[files.length];
for(inti=0;i<files.length;i++){
stream[i]=newFileSeekableStream(
files[i].getCanonicalPath());
}
ParameterBlockpb=(newParameterBlock());
PlanarImagefirstPage=JAI.create("stream",stream[0]);
for(inti=1;i<files.length;i++){
备喊PlanarImagepage=JAI.create("stream",stream[i]);
pages.add(page);
}
TIFFEncodeParamparam=newTIFFEncodeParam();
Filef=newFile(toPath);
if(!f.exists()){
f.mkdirs();
}
OutputStreamos=newFileOutputStream(toPath+File.separator+distFileName);
ImageEncoderenc=ImageCodec.createImageEncoder("tiff",
os,param);
param.setExtraImages(pages.iterator());
enc.encode(firstPage);
for(inti=0;i<files.length;i++){
掘兆stream[i].close();
if(files[i].isFile()&&files[i].exists()){
files[i].delete();
}
}
os.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
㈥ java 把一个大图切割成100份放入byte[],然后取上面10块byte[]数组进行拼接
我是初学者,你看看有帮助不伏启
public static void merge() throws IOException //文件拼接
{
Vector<FileInputStream>vector =new Vector<FileInputStream>();
for (int x=1;x<18 ;x++ )//我切了17份
{
vector.add(new FileInputStream("虚渗e:\\缺誉如part\\"+ x +".part"));
}
Enumeration<FileInputStream> e=vector.elements();
SequenceInputStream sis =new SequenceInputStream(e);
FileOutputStream fos=new FileOutputStream("e:\\刘欢 - 情怨.mp3") ;
byte [] by =new byte [1024*1024];
int len =0;
while ((len=sis.read(by))!=-1)
{
fos.write(by,0,len);
}
fos.close();
sis.close();
㈦ java读取nas存储图片给vue
单纯的上传文件,java的存储图片的方式也有局限性。
1、图片存储在另一个项目工程的资源文件夹中,通过路径直接访搏并问是访问不到的。
2、前端含则vue获取图片名称,拼接文件服务器地址来访问显示图片。
3、出于时间考虑,尽可能的简单实现,相对FTP来说,tomcat的文谈银棚件服务器不需要考虑用户密码的配置。
㈧ 如何在java中随机显示图片
那是在太简单了,方法1可以给每个照片用数字起名,然后生成随机数,用随机数拼接字符串生产图片的URL就可以了,方法2是用数据库两个字段id和URL随谈局机产生id然后读取对应的URL,方法3,用file类的特性,含基让先得到图片文件夹的URL,这样可以得到下面所有文件,可以存到一个List<File>中,然后生成个随机数,用这个随机锋历数get出list里面的File
㈨ java如何将多张图片连接成一张图片
Image bgImage;
Image fgImage;
try {
bgImage = ImageIO.read(bgImageFile);
fgImage = ImageIO.read(fgImageFile);
int bgWidth = bgImage.getWidth(null);
int bgHeight = bgImage.getHeight(null);
int fgWidth = fgImage.getWidth(null);
int fgHeight = fgImage.getHeight(null);
// 此类叫SpliceImages,这个方法是静态方法,所以实例化一下
// 后面的这个对象的属性是自定义的类成员。
SpliceImages spliceImages = new SpliceImages();
// 私有方法
spliceImages.parsePosition(position, bgWidth, bgHeight, fgWidth, fgHeight);
// 生成新图片的长、宽,后面那个是色彩模式
BufferedImage bufferedImage = new BufferedImage(spliceImages.WIDTH, spliceImages.HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics graphics = bufferedImage.createGraphics();
// 绘制背景图片
graphics.drawImage(bgImage, spliceImages.bgX, spliceImages.bgY, null);
// 绘制前景图片
graphics.drawImage(fgImage, spliceImages.fgX, spliceImages.fgY, null);
graphics.dispose();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
encoder.encode(bufferedImage);
output.close();
} catch (IOException e) {
e.printStackTrace();
}
这个是我做图表时写的,整个类中定义了很多重载方法慎桐庆,所以不全贴了。由于用的FusionCharts3.1,单系列图表没有图例,为了处理导出图片,就自制图例,然后用java拼接。其中那个私有方法是我处理两张图片的左上角坐标的。这里就不贴了。实际上我的做法轮枝就是取出两个图片,然后重宽握新绘制。做法比较笨,希望抛砖引玉吧。同理,图片覆盖也是用这个,只是两图片的坐标发生变发。
㈩ java里有什么方法可以拼接的游戏地图不依赖于源素材,也就是保存的文件连图片数据一起保存,而不只是结构
你这中思想不对,这样不便于维护,假如以后图片改了,数据也就变了,保存结构,然后让数据填充