绘制九宫格图片

package *;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGEncodeParam;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageTest {

public ImageTest() {}

public static void main(String[] args) {

List<String> bookFilePaths = new ArrayList<String>();

bookFilePaths.add("E:\\qq\\1.jpg");

bookFilePaths.add("E:\\qq\\2.jpg");

bookFilePaths.add("E:\\qq\\3.jpg");

bookFilePaths.add("E:\\qq\\4.jpg");

bookFilePaths.add("E:\\qq\\5.jpg");

bookFilePaths.add("E:\\qq\\6.jpg");

bookFilePaths.add("E:\\qq\\7.jpg");

bookFilePaths.add("E:\\qq\\8.jpg");

bookFilePaths.add("E:\\qq\\10.jpg");

String picName = "E:\\qq\\test1.jpg";

for (String jpg : bookFilePaths) {

try {

//裁切图片200*200

doFileDownload(jpg,

null, 200, 200);

} catch (Exception e) {

e.printStackTrace();

}

}

//多张小图片生成九宫格图片600*600

createBigJPG(bookFilePaths,

Color.gray ,picName);

}

/**

* 绘制九宫格图片

* @param smallJPG

* @param bgColor

* @param picName

*/

private static void createBigJPG(List<String> smallJPG,

Color bgColor ,String picName) {

try {

int imageCount = smallJPG.size();

//每张小图片的高度,宽度

int smallWidth = 200;

int smallHeight = 200;

//按照大图片宽高绘制一个背景图片

int setWidth = 600;

int setHeight = 600;

BufferedImage bufImage = new BufferedImage(setWidth, setHeight,

BufferedImage.TYPE_INT_RGB);

Graphics2D g = bufImage.createGraphics();

g.setColor(bgColor); //背景的颜色

g.fillRect(0, 0, setWidth, setHeight);

int rowCount = getRowCount(imageCount);

int leftMargin[] = {200,100,0};//左边距

int topMargin[] = {200,100,0};//左边距

int len = 0;

int y = topMargin[rowCount-1]; //纵坐标

for (int i = 1; i <= rowCount; i++) { //遍历每行

int colCount = getColCount(imageCount, rowCount, i);

int x = leftMargin[colCount-1]; //横坐标  可能会出现左边距

for (int j = 1; j <= colCount; j++) {

String jpgname = smallJPG.get(len);

ImageIcon icon = new ImageIcon(jpgname);

Image img = icon.getImage();

g.drawImage(img, x, y, null);

x += smallWidth;

len++;

}

y += smallHeight;

}

g.dispose();

FileOutputStream out = new FileOutputStream(picName);  //指定输出文件

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  //设置文件格式

JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufImage); //从图片缓冲中读取

param.setQuality(50f, true);

encoder.encode(bufImage, param); //存盘

out.flush();

out.close();

} catch (Exception e) {

System.out.println( "createBigJPG Failed!");

e.printStackTrace();

}

}

//获取总行数

public static int getRowCount(int imageCount){

if(imageCount > 6){

return 3;

}

if(imageCount > 3){

return 2;

}

return 1;

}

//获取当前行的列数

public static int getColCount(int imageCount, int rowcount, int currentRow){

if(rowcount == 2){//总行数

if(currentRow == 1){//当前行

return imageCount - 3;

}else{

return 3;

}

}

if(rowcount == 3){

if(currentRow == 1){

return imageCount - 6;

}else{

return 3;

}

}

return imageCount;

}

//裁切图片

public static void doFileDownload(String path,

String filename, int width, int hight)

throws Exception {

// path是指欲下载的文件的路径。

File file = new File(path);

Image img = ImageIO.read(file); // 构造Image对象

int srcwidth = img.getWidth(null); // 得到源图宽

int srcheight = img.getHeight(null); // 得到源图长

// 按照宽度还是高度进行压缩 width 最大宽度 hight 最大高度

if (srcwidth / srcheight > width / hight) {

int h = (int) (srcheight * width / srcwidth);

resize(img, width, h, path, file);

} else {

int w = (int) (srcwidth * hight / srcheight);

resize(img, w, hight, path, file);

}

}

/**

* 强制压缩/放大图片到固定的大小

*

* @param w

*            int 新宽度

* @param h

*            int 新高度

*/

public static void resize(Image img, int w, int h,

String path, File file)

throws IOException {

// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢

BufferedImage image = new BufferedImage(w, h,

BufferedImage.TYPE_INT_RGB);

image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图

File destFile = new File(path);

FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流

// 可以正常实现bmp、png、gif转jpg

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(image); // JPEG编码

out.close();

}

}

时间: 2024-07-30 13:52:01

绘制九宫格图片的相关文章

quartz2D 如何绘制圆形图片, 及圆环图片

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://e.hiphotos.baidu.com/lvpics/w=600/sign=eeeff27ca10f4bfb8cd09d54334d788f/267f9e2f0708283873d

使用MFC CImage类和GDI+ Image加载并绘制PNG图片

一.使用MFC CImage类加载PNG图片        为了测试CImage绘制PNG图片的效果,我们用截图软件截得一张360的界面,然后使用PhotoShop等工具在图片的周边加上了透明的区域,然后保存成PNG图片文件.CImage首先从文件中加载,即 CImage* m_pImgBk; ...... m_pImgBk = new CImage; m_pImgBk->Load( _T("res\\bk.png")); if ( m_pImgBk->IsNull() )

Android:NineGridLayout — 仿微信朋友圈和QQ空间的九宫格图片展示自定义控件

NineGridLayout 一个仿微信朋友圈和QQ空间的九宫格图片展示自定义控件. GitHub:https://github.com/HMY314/NineGridLayout 一.介绍 1.当只有1张图时,可以自己定制图片宽高,也可以使用默认九宫格的宽高: 2.当只有4张图时,以2*2的方式显示: 3.除以上两种情况下,都是按照3列方式显示,但这时有一些细节: a.如果只有9张图,当然是以3*3的方式显示: b.如果超过9张图,可以设置是否全部显示. 如果设置不完全显示,则按照3*3的方式

Android 如何制作九宫格图片(.9.png)

对于编程人员来说,尤其是前端设计设计师,九宫格图片是必须的(.9.png),对于初学者来说不知道这个九宫格图片有什么用,其实这个九宫格图片实际常用在Android的button组件.要上下拉升的背景图片上. 工具/原料 电脑 draw9patch.bat 方法/步骤 第一步:先要找到draw9patch.bat,我的在E:\program\Program Files\android-sdk\tools\draw9patch.bat,这个路径下.对于不同人想必Android安装的路径是不同的,而相

10款基于jQuery实现的鼠标悬停九宫格图片延伸效果

<p><b>1.jQuery多张图片上下叠加切换插件</b></p><p>之前我们已经向大家分享过一款jQuery/CSS3洗牌效果的图片叠加切换应用,本文介绍的这款jQuery多张图片上下叠加切换插件也类似,我们可以将预先加载好的图片按不同的角度叠加起来,点击上下切换按钮时即可将图片上下切换至其他图片后面,效果非常不错.</p><p><img src="http://www.html5tricks.com

css学习任务一:绘制九宫格

今天开始加强实战,第一个任务是用css绘制九宫格. 在完成任务过程中,发现自己又忘了一些很基础的东西,现整理如下: 1.要将多块div放在同一行,用float:left来实现,在排满一行限制的宽度之后紧接着的div会另起一行重新横着排列: 2.一开始我弄完之后,发现块与块之间是连在一起的,原来忘了加margin约束,下次一定要注意: 3.代码虽然完成了,可是还是太冗余了,可以在写css的时候将含有同种属性的id并在一起: 遗憾: 弄出来的效果是方形,后想改成圆角,查阅多篇资料无奈暂时改不了,希望

使用MFC CImage类绘制PNG图片时遇到的问题

原文链接: http://blog.csdn.net/chenlycly/article/details/9193143 为了测试CImage绘制PNG图片的效果,我们用截图软件截得一张360的界面,然后使用PhotoShop等工具在图片的周边加上了透明的区域,然后保存成PNG图片文件.CImage首先从文件中加载,即 CImage* m_pImgBk; ...... m_pImgBk = new CImage; m_pImgBk->Load( _T("res\\bk.png")

如何用PPT做九宫格图片?来了解一下吧

今天给大家分享一个神奇的PPT小技巧,如何用PPT做九宫格图片?不会的小伙伴可以看一下,3分钟就能学会的小技巧哦! 第一步:在PPT中插入图片 点击"插入",选择一张图片即可. 第二步:插入正方形框 点击"形状",选择矩形,按住shift键插入正方形,然后按"Ctrl+D"快速复制即可. 第三步:选中正方形框 选中图片背景,按住shift键选中正方形框即可. 第四步:设置拆分 点击"格式",选择"合并形状"

PPT制图技巧:如何使用表格分割法制作九宫格图片?

很多人都知道PPT也是可以制作图片的,那么大家会不会制作呢?今天小编就教教大家如何使用表格分割法制作九宫格图片?很实用的一个制图技巧哦!No.1首先就是要打开我们的PPT了,新建一个空白文稿.No.2之后在新建空白文稿里插入我们制作九宫格的图片,然后点击[插入],选择[表格]功能,将一个3乘3的表格插入到图片上.然后记得给表格调整大小.No.3在调整完表格大小之后,剪切插入PPT中的图片,再选中插入的表格.鼠标右键单击,选中[设置形状格式].在[填充]中选择"图片或纹理填充",之后点击