正好寫了一個(gè),給你看看哈
創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)城北,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
import?java.awt.*;
import?java.awt.image.BufferedImage;
import?java.io.File;
import?java.util.Date;
import?javax.imageio.ImageIO;
public?class?ScreenCapturer?{
public?static?void?main(String[]?args)?throws?Exception{
Date?date?=?new?Date();
Robot?rbt?=?new?Robot();
BufferedImage?bf?=??rbt.createScreenCapture(new?Rectangle(1440,900));??//這是屏幕分辨率??可以根據(jù)自己的屏幕修改
File?file?=?new?File("d://"+?date.toString().replace("?","").replace(":","")+".jpg");??//這是保存路徑D盤根目錄
ImageIO.write(bf,"jpg",file);
System.out.println("截圖成功!保存于D盤根目錄下!時(shí)間:"?+?date.toString());
}
}
圖像無(wú)縮放?
這個(gè)就是個(gè)算法的問題吧,你就直接根據(jù)多少行多少列,挨個(gè)給像素點(diǎn)賦值啊。不過要求原始圖像大小相同吧。
這是以段繪制水印的程序 還有透明效果 水印上去的就是一張圖片 你應(yīng)該看的懂
/**
* @see 繪制水印
* @param base 根目錄
* @param file 圖片文件
* @param image 圖片源
* @param width 圖片寬度
* @param height 圖片高度
* */
private boolean printWater(String base, File file, BufferedImage image, int width, int height){
String fileName = file.getName();
String extend = fileName.substring(fileName.lastIndexOf(".") + 1);
//如果圖片不是gif類型,并且圖片小于1M就加水印
if(!"gif".toLowerCase().equals(extend) file.length() = 1024 * 1024){
try {
String waterImgPath = UtilityPropKit.getProp("waterImgPath");
BufferedImage water = ImageIO.read(new File(base + waterImgPath)); //水印
// 水印長(zhǎng)度
int waWidth = water.getWidth();
// 水印高度
int waHeight = water.getHeight();
if(height waHeight * 2 width waWidth * 2){
//根據(jù)源圖片尺寸,產(chǎn)生目標(biāo)圖片
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//獲取Graphics2D
Graphics2D graph = img.createGraphics();
//繪制源圖
graph.drawImage(image, 0, 0, width, height, null);
//在已經(jīng)繪制的圖片中加入透明度通道
graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
//繪制水印
graph.drawImage(water, 0, height-waHeight, waWidth, waHeight, null);
//釋放對(duì)象
graph.dispose();
//保存文件
ImageIO.write(img, extend, file);
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
用css樣式定義圖片的寬度和高度;但是這也需要看你圖片的格式,圖片定義寬度和高度后會(huì)失貞,建議采用gif格式的圖片。
之前有做過圖片合成視頻的功能,大概代碼就是這樣,你可以看一下
/**
* 圖片合成視頻
* @param mp4SavePath 視頻保存路徑
* @param imageDir 圖片地址
* @param rate 這個(gè)可以理解成視頻每秒播放圖片的數(shù)量
*/
public static boolean jpgToMp4(String mp4SavePath, String imageDir, double rate) {
FFmpegFrameRecorder recorder = null;
boolean flag = true;
try {
File[] files = FileUtils.fileSort(imageDir);
int [] widthArray = new int[files.length];
int [] heightArray = new int[files.length];
/**
* 獲取合成視頻圖片的最大寬高,避免圖片比例不一致最終合成效果差
*/
for (int i = 0; i files.length; i++) {
BufferedImage bufferedImage = ImageIO.read(files[i]);
widthArray[i] = bufferedImage.getWidth();
heightArray[i] = bufferedImage.getHeight();
}
/**
* 這個(gè)方法主要是防止圖片比例達(dá)不到視頻合成比例的要求,如果達(dá)不到下面條件視頻則會(huì)無(wú)法播放
* 圖片寬:必須要被32整除
* 圖片高:必須要被2整除
*/
int [] maxWH = getImgMaxWH(widthArray,heightArray);
recorder = new FFmpegFrameRecorder(mp4SavePath,maxWH[0],maxWH[1]);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
/**
* 視頻質(zhì)量:目前測(cè)試出來(lái)的是25-30最清晰,視頻質(zhì)量范圍好像是0-40,具體可以自己慢慢測(cè)
*/
recorder.setVideoQuality(25);
recorder.setFormat("mp4");
recorder.setFrameRate(rate 0 ? rate : 1);
recorder.setPixelFormat(0);
recorder.start();
OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
/**
* 合成視頻
*/
for(int i = 0; i files.length; i++ ){
opencv_core.IplImage image = cvLoadImage(files[i].getPath());
recorder.record(conveter.convert(image));
opencv_core.cvReleaseImage(image);
}
logger.info("合成成功");
} catch(Exception e) {
e.printStackTrace();
flag = false;
logger.error("合成失敗");
} finally {
try {
if (recorder != null){
recorder.stop();
recorder.release();
}
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
}
return flag;
}
Image image1 = ImageIO.read(new File(fileurl1));
Image image2 = ImageIO.read(new File(fileurl2));
int width = image.getWidth(5000);// 得到圖片的長(zhǎng),寬
int height = image.getHeight(5000);
BufferedImage bufferedimage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);// 構(gòu)造一個(gè)內(nèi)存圖片
bufferedimage.getGraphics().drawImage(image1, 0, 0, width, height, null); // 將本地圖片畫入到內(nèi)存圖片
bufferedimage.getGraphics().drawImage(image2, 0, 0, image1.getWidth, image1.getHeight, null);
response.setContentType("image/jpeg");// 設(shè)置返回頭部
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
ImageIO.write(bufferedimage, "JPEG", response.getOutputStream()); //寫到瀏覽器
大概方向就是這樣,把圖片放到內(nèi)存中,然后繪制內(nèi)存圖片,把他們包含進(jìn)去,然后把內(nèi)存圖片返回。
我亂改的,不能跑的。前不久剛做過
你可以試試
==========================================
幾張圖放一起沒試過,你可以試試在繪了一張后,接著會(huì)第2張,他們的開始地點(diǎn)相同,看會(huì)不會(huì)被覆蓋
當(dāng)前題目:java代碼合成圖片,Java圖片合成
分享地址:http://chinadenli.net/article10/heeego.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、企業(yè)建站、定制網(wǎng)站、網(wǎng)站排名、企業(yè)網(wǎng)站制作、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)