`
sunway
  • 浏览: 114820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

拼图测试类

 
阅读更多

/**
 *
 */
/**
 * @author xingwei.jiao
 *
 */
package com.qunar.wireless.ugc.service.cms;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;

import javax.imageio.ImageIO;

import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.qunar.wireless.ugc.caravan.business.las.record.MergePic;
import com.qunar.wireless.ugc.exception.DaoException;
import com.qunar.wireless.ugc.exception.ServiceException;
import com.qunar.wireless.ugc.module.pic.Album;
import com.qunar.wireless.ugc.service.pic.AlbumServiceImpl;
import com.qunar.wireless.ugc.service.pic.IAlbumService;
import com.qunar.wireless.ugc.service.user.UserServiceImpl;
public class TestPic{
    private ApplicationContext ac;
    private IAlbumService albumService;
    private  MergePic mergePic;
    private static final Logger log = Logger.getLogger(TestPic.class);
    @Before
    public void setUp() throws Exception {
        try {
            ac = new ClassPathXmlApplicationContext("applicationContext.xml");
            albumService = (AlbumServiceImpl) ac.getBean("com.qunar.wireless.ugc.service.pic.AlbumServiceImpl");
            mergePic =(MergePic)ac.getBean("mergePic");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @After
    public void tearDown() throws Exception {
        ac = null;
    }
    @Test
    public void testSharePic(){
         Long userId = 88l;
         Long albumId = 68l;
         try {
            Album album = albumService.getById(albumId);
            long start = System.currentTimeMillis();
            String  result = mergePic.createMergedPic(album, userId, true, false);
            long end = System.currentTimeMillis();
            log.info("生成拼图共花费了"+((end-start)/1000)+"秒!");
            log.info("拼图的url: "+result);
            System.out.println(result);
        } catch (DaoException e) {
            e.printStackTrace();
        } catch (ServiceException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void testYSplicePic(){
        try {  
            /* 1 读取第一张图片*/   
            File fileOne = new File("D:\\test\\2.JPG");  
            BufferedImage imageFirst = ImageIO.read(fileOne);  
            int width = imageFirst.getWidth();// 图片宽度  
            int height = imageFirst.getHeight();// 图片高度  
            int[] imageArrayFirst = new int[width * height];// 从图片中读取RGB  
            imageArrayFirst = imageFirst.getRGB(0, 0, width, height, imageArrayFirst, 0, width);  
 
            /* 1 对第二张图片做相同的处理 */ 
            File fileTwo = new File("D:\\test\\8.JPG");  
            BufferedImage imageSecond = ImageIO.read(fileTwo);  
            height = imageSecond.getHeight();// 图片高度
            int[] imageArraySecond = new int[width * height];  
            imageArraySecond = imageSecond.getRGB(0, 0, width, height, imageArraySecond, 0, width);  
              
            // 生成新图片   
            BufferedImage imageResult = new BufferedImage(width, height * 2,BufferedImage.TYPE_INT_RGB);  
            imageResult.setRGB(0, 0, width, height, imageArrayFirst, 0, width);// 设置左半部分的RGB  
            imageResult.setRGB(0, height, width, height, imageArraySecond, 0, width);// 设置右半部分的RGB  
            File outFile = new File("D:\\test\\out1.jpg");  
            ImageIO.write(imageResult, "jpg", outFile);// 写图片  
            System.out.println("合并图片成功!");
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

    }
    @Test
    public void testCreateMainPic_File(){
        try {
        int width = 470;
        int height = 1024;
        String s = "游记";
         File file = new File("D:\\test\\album.JPG");  
         File head = new File("D:\\test\\head.JPG");  
         BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个画布
         BufferedImage headBufferedImage = ImageIO.read(head);
        Graphics2D graphics2d = (Graphics2D)bufferedImage.getGraphics();    //获取画布的画笔     
        graphics2d.setBackground(new Color(236,230,211));//创建背景色
        graphics2d.clearRect(0, 0, width, height);
        graphics2d.setPaint(new Color(129,183,83));
        graphics2d.fillRect(0, 0, 400, 100);
        graphics2d.drawImage(headBufferedImage, 10, 5, null);
        graphics2d.setPaint(new Color(246,250,242)); 
        graphics2d.setFont(new Font("宋体",Font.BOLD,20));
//        graphics2d.fillRect(0, 10, 400, 10);
//        graphics2d.setPaint(Color.red);
//        FontRenderContext context = graphics2d.getFontRenderContext();
//        Font font = Font.decode("宋体");
//        font = font.deriveFont(Float.parseFloat("12"));
//        Rectangle2D rectangle2d = font.getStringBounds(s, context);
//         double x = (width - rectangle2d.getWidth()) / 2;
//         double y = (height - rectangle2d.getHeight()) / 2;  
//         double ascent = -rectangle2d.getY();  
//         double baseY = y + ascent;
         graphics2d.drawString(s, 120, 60);  
            ImageIO.write(bufferedImage, "jpg", file);
            System.out.println("生成图片成功!"); 
        } catch (IOException e) {
            System.out.println("生成图片出错........"); 
            e.printStackTrace();
        }
       
    }
    @Test
    public void testCreateMainPic(){
        try {
        int width = 400;
        int height = 1024;
        String s = "游记";
         File file = new File("D:\\test\\album.JPG");  
         File head = new File("D:\\test\\head.JPG");  
         File pic1 = new File("D:\\test\\pic1.JPG");  
         
         //start------开始读取标题信息,“去那网....”-------------------------------------------------------------------------------------
         OutputStream outputStream = getBackgroundPicText();
         ByteArrayInputStream byteArrayInputStream = null;
         if(outputStream instanceof ByteArrayOutputStream){
             byteArrayInputStream = new ByteArrayInputStream( ((ByteArrayOutputStream) outputStream).toByteArray());
         }
       
         
         BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个画布
         BufferedImage headBufferedImage = ImageIO.read(head);
         BufferedImage bImage = ImageIO.read(byteArrayInputStream);
         BufferedImage pic1Image = ImageIO.read(pic1);
        Graphics2D graphics2d = (Graphics2D)bufferedImage.getGraphics();    //获取画布的画笔     
        graphics2d.setBackground(new Color(236,230,211));//创建背景色
        graphics2d.clearRect(0, 0, width, height);
        graphics2d.setPaint(new Color(129,183,83));
        graphics2d.fillRect(0, 0, width, 100);
        graphics2d.drawImage(headBufferedImage, 10, 5, null);
        graphics2d.setPaint(new Color(246,250,242)); 
        graphics2d.setFont(new Font("宋体",Font.BOLD,20));
         graphics2d.drawString(s, 120, 60);  
         //start,开始插入标题信息图片--------------------------------------------------------------------------------------------------------
            graphics2d.drawImage(bImage, 20, 130, null);
        //开始插入图片和文字1
             outputStream = getPicText();
             if(outputStream instanceof ByteArrayOutputStream){
                 byteArrayInputStream = new ByteArrayInputStream( ((ByteArrayOutputStream) outputStream).toByteArray());
             }
             bImage = ImageIO.read(byteArrayInputStream);
             graphics2d.drawImage(bImage, 20, 300, null);
             
           
         //开始生成图片
            ImageIO.write(bufferedImage, "jpg", file);
            graphics2d.dispose();
            System.out.println("生成图片成功!"); 
        } catch (IOException e) {
            System.out.println("生成图片出错........"); 
            e.printStackTrace();
        }
       
    }
    @Test
    public void testCreateBackgroundPicText(){
        try {
            int width = 470;
            int height = 125;
            String s1 = "【去哪儿网旅图】每日最佳图片1111";
            String dateString = "2012-08-21";
            String tripString = "29天旅程";
            String addressString = "北京 上海  广州 山东";
             File result = new File("D:\\test\\textHead.JPG");  
             File background = new File("D:\\test\\backgroundTextHead.JPG");  
             BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个画布
             BufferedImage headBufferedImage = ImageIO.read(background);
            Graphics2D graphics2d = (Graphics2D)bufferedImage.getGraphics();    //获取画布的画笔     
            graphics2d.setBackground(new Color(236,230,211));//创建背景色
            graphics2d.clearRect(0, 0, width, height);
            graphics2d.drawImage(headBufferedImage, 0, 0, null);
            graphics2d.setPaint(new Color(60,60,60)); 
            graphics2d.setFont(new Font("宋体",Font.BOLD,20));
//            graphics2d.fillRect(0, 10, 400, 10);
//            graphics2d.setPaint(Color.red);
//            FontRenderContext context = graphics2d.getFontRenderContext();
//            Font font = Font.decode("宋体");
//            font = font.deriveFont(Float.parseFloat("12"));
//            Rectangle2D rectangle2d = font.getStringBounds(s, context);
//             double x = (width - rectangle2d.getWidth()) / 2;
//             double y = (height - rectangle2d.getHeight()) / 2;  
//             double ascent = -rectangle2d.getY();  
//             double baseY = y + ascent;
             graphics2d.drawString(s1, 20, 30);  
             graphics2d.setFont(new Font("宋体",Font.PLAIN,14));
             graphics2d.drawString(dateString, 45, 70);  
             graphics2d.drawString(tripString, 200, 70);  
             graphics2d.drawString(addressString, 30, 100);  
                ImageIO.write(bufferedImage, "jpg", result);
                graphics2d.dispose();
                System.out.println("生成图片成功!"); 
            } catch (IOException e) {
                System.out.println("生成图片出错........"); 
                e.printStackTrace();
            }
           
    }
    public OutputStream getBackgroundPicText(){
            OutputStream outputStream = new ByteArrayOutputStream();
            try {
            int width = 470;
            int height = 125;
            String s1 = "【去哪儿网旅图】每日最佳图片";
            String dateString = "2012-08-21";
            String tripString = "29天旅程";
            String addressString = "北京 上海  广州 山东";
             File result = new File("D:\\test\\textHead.JPG");  
             File background = new File("D:\\test\\backgroundTextHead.JPG");  
             BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个画布
             BufferedImage headBufferedImage = ImageIO.read(background);
            Graphics2D graphics2d = (Graphics2D)bufferedImage.getGraphics();    //获取画布的画笔     
            graphics2d.setBackground(new Color(236,230,211));//创建背景色
            graphics2d.clearRect(0, 0, width, height);
            graphics2d.drawImage(headBufferedImage, 0, 0, null);
            graphics2d.setPaint(new Color(60,60,60)); 
            graphics2d.setFont(new Font("宋体",Font.BOLD,20));
//            graphics2d.fillRect(0, 10, 400, 10);
//            graphics2d.setPaint(Color.red);
//            FontRenderContext context = graphics2d.getFontRenderContext();
//            Font font = Font.decode("宋体");
//            font = font.deriveFont(Float.parseFloat("12"));
//            Rectangle2D rectangle2d = font.getStringBounds(s, context);
//             double x = (width - rectangle2d.getWidth()) / 2;
//             double y = (height - rectangle2d.getHeight()) / 2;  
//             double ascent = -rectangle2d.getY();  
//             double baseY = y + ascent;
             graphics2d.drawString(s1, 20, 30);  
             graphics2d.setFont(new Font("宋体",Font.PLAIN,14));
             graphics2d.drawString(dateString, 45, 70);  
             graphics2d.drawString(tripString, 200, 70);  
             graphics2d.drawString(addressString, 30, 100);  
                boolean f = ImageIO.write(bufferedImage, "jpg", outputStream);
                if(f){
                    System.out.println("生成图片成功!"); 
                }else{
                    System.out.println("生成图片出错........"); 
                }
            } catch (IOException e) {
                System.out.println("生成图片出错........"); 
                e.printStackTrace();
            }
        return outputStream;
    }
    public OutputStream getPicText(){
        OutputStream outputStream = new ByteArrayOutputStream();
        try {
            int width = 470;
            int height = 400;//传进来的
            String desc = "描述信息haha的绝对狙击得紧紧的...........";
            String addressString = "北京 上海  广州 山东";
            String dateString = "2012-08-21";
            String pic1String = "";
            File anchor = new File("D:\\test\\anchor.JPG");  
            File time = new File("D:\\test\\time.JPG");  
           
            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个画布
            Graphics2D graphics2d = (Graphics2D)bufferedImage.getGraphics();    //获取画布的画笔     
            graphics2d.setBackground(new Color(255,255,255));//创建背景色
            graphics2d.clearRect(0, 0, width, height);
           
            if(pic1String != null && !pic1String.equals("")){
                File pic1 = new File(pic1String);  
                 BufferedImage pic1BufferedImage = ImageIO.read(pic1);
                 graphics2d.drawImage(pic1BufferedImage, 10, 5, null);
                 
            }
            if(desc != null && !desc.equals("")){
                graphics2d.setPaint(new Color(60,60,60)); 
                graphics2d.setFont(new Font("宋体",Font.PLAIN,14));
                graphics2d.drawString(desc, 20, 30);  //30,是自动算出来
               
            }
           
             if(addressString != null && !addressString.equals("")){//画锚点跟地址
                 BufferedImage anchorBufferedImage = ImageIO.read(anchor);
                 graphics2d.drawImage(anchorBufferedImage, 10, 310, null);
                 graphics2d.setPaint(new Color(65,152,167)); 
                    graphics2d.setFont(new Font("宋体",Font.PLAIN,14));
                     graphics2d.drawString(addressString, 20, 320);  
             }
             if(dateString != null && !dateString.equals("")){//时间
                 BufferedImage timeBufferedImage  = ImageIO.read(time);
                 graphics2d.drawImage(timeBufferedImage, 250, 310, null);
                 graphics2d.setPaint(new Color(65,152,167)); 
                    graphics2d.setFont(new Font("宋体",Font.PLAIN,14));
                     graphics2d.drawString(dateString, 270, 320);  
             }
                boolean f = ImageIO.write(bufferedImage, "jpg", outputStream);
                if(f){
                    System.out.println("生成图片成功!"); 
                }else{
                    System.out.println("生成图片出错........"); 
                }
            } catch (IOException e) {
                System.out.println("生成图片出错........"); 
                e.printStackTrace();
            }
        return outputStream;
    }
    @Test
    public void getHeadHeight(){
        String headUrl = "http://source.qunar.com/site/images/wap/lvtu/lvtu_userhead.gif";
         try {
             URL url = new URL(headUrl);
            BufferedImage headBufferedImage = ImageIO.read(url);
            int height = headBufferedImage.getHeight();
            System.out.println("height:"+height);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
    }
}

分享到:
评论

相关推荐

    ANDROID下的拼图源码

    8. **测试与优化**: 开发者需要进行单元测试、集成测试以及性能测试,确保游戏在各种设备和Android版本上都能正常运行。此外,为了提高效率,可能需要对图像处理算法进行优化,比如使用缓存策略减少重复计算。 9. *...

    MFC开发拼图游戏

    在拼图游戏中,我们可能需要创建一个CWinApp派生类来作为游戏的主程序,以及多个CWnd派生类来实现游戏界面的不同部分。 拼图游戏的开发过程可以分为以下几个步骤: 1. **图像处理**:在MFC中,我们可以使用GDI...

    拼图游戏 (源码+所有文件)

    萌新做的一个简单的Java拼图游戏 ...其他有主方法的是测试类。 多线程。 下拉列表选择数字可以切换关卡图片,最后的“+”,可以添自己的图片到关卡中。 设有背景音乐 有一键通过按钮 等等,块下载去看看吧。

    用java编写拼图小游戏

    在本项目中,我们主要探讨的是如何使用Java编程语言来创建一个拼图小游戏。这个程序不仅包含基本的拼图逻辑,还集成了音乐播放功能,为用户提供了丰富的游戏体验。以下将详细介绍涉及的关键知识点。 1. **Java编程...

    安卓源代码-实现拼图游戏

    同时,Android的Canvas和Paint类可以用于在屏幕上绘制和着色这些拼图块。 **游戏逻辑**是拼图游戏的内核。开发者需要实现算法来打乱拼图、检查拼图是否完成、移动拼图块等功能。这可能涉及到数组或集合来存储拼图的...

    拼图游戏 C# winform

    C#的System.Random类可以帮助我们生成随机数,然后根据这些随机数重新排列拼图块。 6. **状态管理**:为了跟踪拼图的状态(如是否完成),我们需要维护一个二维数组或List来表示拼图的当前布局,并与原始图像进行...

    拼图游戏Java程序所写

    由于给出的列表只有一个文件名“拼图游戏”,我们可以推测这可能包含了整个项目的所有源代码文件、资源文件或者编译后的类文件。在Java项目中,通常会有一个或多个源代码文件夹(如src),包含了.java源代码文件;...

    android拼图游戏代码

    同时,可以使用`Matrix`类来处理拼图块的位置和旋转。 4. **触摸事件处理**:通过重写`onTouchEvent()`方法,监听用户的触摸操作。判断用户点击的是哪个拼图块,然后更新该块的位置,确保其在允许的范围内移动。 5...

    Java实现拼图游戏.zip

    Java的`java.awt.image`包提供了BufferedImage类来处理图像,`javax.imageio.ImageIO`类用于读取和写入图像文件。 4. **数据结构**:拼图游戏的核心是拼图的状态表示。这通常使用二维数组或ArrayList来存储每个拼图...

    自己做的拼图

    如果"拼图"是源代码文件夹,那么里面可能包含了主程序类、图像处理类、用户交互逻辑以及可能的测试代码。如果是可执行文件,那可能是已经编译好的JAR包,可以直接运行体验拼图游戏。 在这个项目中,开发者可能运用...

    拼图实验设计 C#

    在这个拼图游戏中,C#的类和对象机制可能被用来封装拼图的各种逻辑,例如图片处理、拼图块的移动和旋转、游戏状态的保存和恢复等。开发者可能创建了专门的类来表示拼图板、拼图块,甚至游戏逻辑本身,以实现良好的...

    android拼图小游戏源代码

    【Android拼图小游戏源代码详解】 对于初学者来说,学习Android开发是一个有趣且充满挑战的过程。这个"android拼图小游戏源代码"是一个很好的起点,它可以帮助你了解Android Studio的使用,掌握基本的Android编程...

    C#制作拼图游戏

    本资源为一个基于C#开发的拼图游戏,包括游戏的设计、开发和测试三个阶段。游戏的主要功能包括图片尺寸自适应、图片动态分割、查看原图、随机切换图片、鼠标拖动拼图和自动判断拼图成功等。游戏的设计目标是设计开发...

    mfc制作的拼图游戏

    2. 拼图块的操作:MFC中的CWnd类可以作为拼图块的基类,每个拼图块都是一个窗口对象,可以响应鼠标点击、拖动等事件。通过重载OnPaint函数,实现拼图块的绘制;利用OnLButtonDown等消息处理函数,实现块的选中与移动...

    C# 简单拼图游戏

    进行多轮测试,确保不同难度级别的拼图都能正常运行。 总的来说,"C# 简单拼图游戏"是一个结合了C#编程技术、图像处理、用户交互设计以及算法应用的项目。通过这个项目,学习者不仅可以提升C#编程技能,还能掌握...

    拼图源代码

    开发者需要编写测试用例,覆盖各种可能的游戏状态,以确保拼图游戏在各种情况下都能正常运行。 总的来说,"拼图源代码"涵盖了图像处理、数据结构、算法设计、用户交互、错误处理和性能优化等多个方面,是学习和研究...

    java 拼图游戏源代码

    Java拼图游戏源代码是一种基于Java编程语言实现的益智类游戏,通常称为“拼图”或“拼图谜题”。这种游戏的核心是将一幅完整的图像分割成多个小块,玩家需要通过移动这些小块来恢复原图。下面将详细探讨Java拼图游戏...

    java拼图游戏程序

    开发者需要定义一个数据结构(如二维数组或自定义类)来存储拼图碎片,并实现相应的算法来处理碎片的操作。 4. 事件监听:为了响应用户的操作,如点击和拖动,我们需要设置事件监听器。Java中的`MouseListener`和`...

    数字乱码拼图游戏

    开发者需了解如何使用Bitmap、Canvas和Paint类进行图像加载、裁剪、旋转和绘制。同时,优化图像资源以减少内存占用也是必要的。 5. **触摸事件处理**:在Android中,GestureDetector和MotionEvent可以帮助处理用户...

    java制作拼图游戏

    1. Java基础:制作拼图游戏首先需要掌握Java编程语言的基础知识,包括语法、数据类型、流程控制、数组、类和对象等概念。Java面向对象的特性使得可以通过创建类来封装游戏的各个部分。 2. 图形用户界面(GUI)编程...

Global site tag (gtag.js) - Google Analytics