Java中用Thumbnailator生成缩略图
- 格式:ppt
- 大小:553.00 KB
- 文档页数:12
BufferedImage是Java中的一个类,它表示带有图像数据的位图图像。
BufferedImage是抽象类,它具有将图像转换为位图的方法。
BufferedImage的图像数据被存储在字节数组中,并使用DataBuffer类来访问这些数据。
BufferedImage支持多种图像格式,包括常见的JPEG、PNG和BMP 等。
通过BufferedImage类,我们可以读取图像文件,创建图像对象,并对图像进行缩放、裁剪、旋转、合并等操作。
BufferedImage提供了getWidth()和getHeight()方法,用来获取图像的宽度和高度。
我们可以通过这两个方法获取到图像的大小,然后可以进行各种处理。
此外,BufferedImage还提供了其他一些方法,如getRGB()、setRGB()、getSubimage()等,用于获取和设置像素值、获取和设置图像的一部分等操作。
总的来说,BufferedImage是Java中表示位图图像的一个类,它提供了多种方法和属性来处理和操作图像数据。
bufferedimage用法BufferedImage 是 Java 中的一个图像处理类,它可以用于创建、修改和操作图像。
下面将详细介绍 BufferedImage 的用法。
1. 创建 BufferedImage 对象:```javaBufferedImage image1 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);BufferedImage image2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);```2.导入图像文件:可以使用 ImageIO 类的静态方法 read( 来导入图像文件。
例如:```javaBufferedImage image = ImageIO.read(new File("image.jpg"));```3.保存图像文件:可以使用 ImageIO 类的静态方法 write( 来保存图像文件。
例如:```javaImageIO.write(image, "jpg", new File("newImage.jpg"));```4.获取图像的宽度和高度:可以使用 BufferedImage 的 getWidth( 和 getHeight( 方法获取图像的宽度和高度。
例如:```javaint width = image.getWidth(;int height = image.getHeight(;```5.获取图像的像素值:可以使用 BufferedImage 的 getRGB( 方法获取图像中指定位置的像素值。
例如:```javaint pixel = image.getRGB(x, y);int red = (pixel >> 16) & 0xFF;int green = (pixel >> 8) & 0xFF;int blue = pixel & 0xFF;```6.设置图像的像素值:可以使用 BufferedImage 的 setRGB( 方法设置图像中指定位置的像素值。
java处理图⽚按⽐例缩放功能java中的图⽚按⽐例缩放功能1. 按固定长宽进⾏缩放/** 图⽚缩放,w,h为缩放的⽬标宽度和⾼度* src为源⽂件⽬录,dest为缩放后保存⽬录*/public static void zoomImage(String src,String dest,int w,int h) throws Exception {double wr=0,hr=0;File srcFile = new File(src);File destFile = new File(dest);BufferedImage bufImg = ImageIO.read(srcFile); //读取图⽚Image Itemp = bufImg.getScaledInstance(w, h, bufImg.SCALE_SMOOTH);//设置缩放⽬标图⽚模板wr=w*1.0/bufImg.getWidth(); //获取缩放⽐例hr=h*1.0 / bufImg.getHeight();AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(wr, hr), null);Itemp = ato.filter(bufImg, null);try {ImageIO.write((BufferedImage) Itemp,dest.substring(stIndexOf(".")+1), destFile); //写⼊缩减后的图⽚} catch (Exception ex) {ex.printStackTrace();}}2. 按固定⽂件⼤⼩进⾏缩放/** 图⽚按⽐率缩放* size为⽂件⼤⼩*/public static void zoomImage(String src,String dest,Integer size) throws Exception {File srcFile = new File(src);File destFile = new File(dest);long fileSize = srcFile.length();if(fileSize < size * 1024) //⽂件⼤于size k时,才进⾏缩放,注意:size以K为单位return;Double rate = (size * 1024 * 0.5) / fileSize; // 获取长宽缩放⽐例BufferedImage bufImg = ImageIO.read(srcFile);Image Itemp = bufImg.getScaledInstance(bufImg.getWidth(), bufImg.getHeight(), bufImg.SCALE_SMOOTH);AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(rate, rate), null);Itemp = ato.filter(bufImg, null);try {ImageIO.write((BufferedImage) Itemp,dest.substring(stIndexOf(".")+1), destFile);} catch (Exception ex) {ex.printStackTrace();}}。
最近公司说要在portal中添加一个上传图片并生成缩略图的方法,试了很久,终于搞定了;写下点心得吧,使大家少走弯路;首先做之前,google了一下,发现很多生产缩略图的方法:Java代码1.BufferedImage img = ImageIO.read(file);2. int h = img.getHeight();3. int w = img.getWidth();4.5. if(h>=96 && w >=96){6. int nw = 96;7. int nh = (nw * h) / w;8. if(nh>96) {9. nh = 96;10. nw = (nh * w) / h;11. }12. ByteArrayOutputStream out = new ByteArrayOutputStream();13. BufferedImage dest = new BufferedImage(nw,nh, BufferedImage.TYPE_INT_RGB);14. dest.getGraphics().drawImage(img,0,0,nw, nh,null);15. ImageIO.write(dest, "jpeg", out);16. imageThumbnail = out.toByteArray();17. }18. else{19. imageThumbnail = imageData;20. }但是使用后发现,对于底色是透明的图片,生成的缩略图是别的颜色的,于是找原因,发现jpeg是最大的祸首;现在修改代码:Java代码1.BufferedImage img = ImageIO.read(file);2. int h = img.getHeight();3. int w = img.getWidth();4.5. if(h>=96 && w >=96){6. int nw = 96;7. int nh = (nw * h) / w;8. if(nh>96) {9. nh = 96;10. nw = (nh * w) / h;11. }12. ByteArrayOutputStream out = new ByteArrayOutputStream();13. BufferedImage dest = new BufferedImage(nw,nh,BufferedImage.TYPE_4BYTE_ABGR);14. dest.getGraphics().drawImage(img,0,0,nw, nh,null);15. GifEncoder.encode(dest, out);16. //ImageIO.write(dest, "gif", out);17. imageThumbnail = out.toByteArray();18. }19. else{20. imageThumbnail = imageData;21. }其中使用了GifEncoder这也类,对应的jar包就是gif89.jar,这是个开源的包,做了修改,去掉了恶心的公司logo,现在生成的缩略图没有问题了,连gif 的动画也能缩略,强啊用Java缩小一个股票图片总是失真,造成了好多锯齿状,文字不清晰,K图也断断续续的了。
java获取优酷等视频缩略图篇一:Android教程获取SD卡视频文件缩略图Android教程获取SD卡视频文件缩略图Java代码????????? privateBitmapcreateVideoThumbnail(StringfilePath){ Bitmapbi tmap=null;MediaMetadataRetrieverretriever=newMediaMetadataRetriever(); try{ (_CAPTURE_FRAME_ONLY); (filePath); bitmap=(); }catch(IllegalArgumentExceptionex){ //Assumethis isacorruptvideofile?? }catch(RuntimeExceptionex){?? //Assumethisisacorruptvideofile.?? }finally{?? try{?? ();?? }catch(RuntimeExceptionex){?? //Ignorefailureswhilecleaningup.?? }?? }?? returnbitmap;?? }???? privatevoidgetVideoFile(finalListlist)?? {?? Bitmapbitmap=null;???? ContentResolvermContentResolver=(); ?? Cursorcursor=(_CONTENT_URI,null,?? null,null,_SORT_ORDER);???????? if(())?? {?? do{?? //ID:_ID?? intid=((_ID)); ???? //名称:?? Stringtilte=(()); ???? //专辑名:?? Stringalbum=(( ));?????? //歌手名:?? Stringartist=(()); ???? //路径:?? Stringurl=(()); ???? //总播放时长:?? intduration=(()); ???? //大小:?? intsize=(int)(());???? //拍摄时间?? intdateTaken=((_TAKEN));?? Stringdatetime=(“yyyy-MM-ddkk:mm:ss”,dateTaken).toString( );???? bitmap=createVideoThumbnail(url);???? }应放在工程的:下面篇二:融合视觉内容分析的网络视频缩略图推荐龙源期刊网 .cn融合视觉内容分析的网络视频缩略图推荐作者:张维刚王祯骏黄庆明高文来源:2014年第03期收稿日期:2014-04-18基金项目:国家重点基础研究发展计划(973)(2012CB316400);国家自然科学基金(61025011, 61332016, 61202322)。
android获取视频第⼀帧作为缩略图的⽅法今天,简单讲讲android⾥如何获取⼀个视频⽂件的第⼀帧作为缩略图显⽰在界⾯上。
之前,我说个最近需要从服务器下载视频⽂件,但是下载后肯定需要显⽰视频的缩略图在界⾯上给⽤户看,于是想到显⽰视频的第⼀帧作为缩略图。
但是我不知道具体怎么写,于是在⽹上查找资料,最终是解决了问题。
这⾥记录⼀下。
⼀.使⽤MediaMetadataRetriever获取视频的第⼀帧作为缩略图/*** 获取视频⽂件截图** @param path 视频⽂件的路径* @return Bitmap 返回获取的Bitmap*/public static Bitmap getVideoThumb(String path) {MediaMetadataRetriever media = new MediaMetadataRetriever();media.setDataSource(path);return media.getFrameAtTime();}这⾥需要注意⼀点,从API 10开始新增⼀类MediaMetadataRetriever可以⽤来获取媒体⽂件的信息,可以获取视频任何⼀帧的缩略图。
所以使⽤MediaMetadataRetriever的API最⼩为10.这⾥还列举⼀下MediaMetadataRetriever获取视频的其他⼏个函数://获取第⼀帧原尺⼨图⽚mmrc.getFrameAtTime();//获取指定位置的原尺⼨图⽚注意这⾥传的timeUs是微秒mmrc.getFrameAtTime(timeUs, option);//获取指定位置指定宽⾼的缩略图mmrc.getScaledFrameAtTime(timeUs, MediaMetadataRetrieverCompat.OPTION_CLOSEST, width, height);//获取指定位置指定宽⾼并且旋转的缩略图mmrc.getScaledFrameAtTime(timeUs, MediaMetadataRetrieverCompat.OPTION_CLOSEST, width, height, rotate);这⾥简单讲讲,media.getFrameAtTime()实际上也是调⽤mmrc.getFrameAtTime(-1, OPTION_CLOSEST_SYNC );即获取从-1秒后最近位置的关键帧,其实就是第⼀帧数据。
谈谈thumbnails的用法前言:thumbnails是Java一个优秀的图像处理库,可以对图片进行压缩、加水印、裁剪、更改格式等功能。
下面为大家介绍使用这个图像处理库。
thumbnails的使用:一、引入依赖:1.<!-- 图片处理 -->2.<dependency>3.<groupId>net.coobird</groupId>4.<artifactId>thumbnailator</artifactId>5.<version>0.4.8</version>6.</dependency>二、编写工具类:说明:这个类第一个方法就是设置上传的图片保存的很路径,比如上传的图片都保存在E:/download/image/目录下;第二个方法就是设置图片保存的子目录,子目录是根据传入的shopId生成的,然后将根目录与子目录拼接起来就是图片的保存路径。
1、PathUtil.java:1.public class PathUtil {2.// 获取分隔符3.private static String separator = System.getProperty("file. separator");4.5./**6.* 图片保存的根目录7.* @return8.*/9.public static String getImgBasePath() {10.// 获取操作系统11.String os = System.getProperty("");12.String basePath = "";13.if (os.toLowerCase().startsWith("win")) {14.// "/home/xiangze/image/"15.basePath = "E:/download/image/";16.} else {17.basePath = "/home/ftpuser/images/";18.}19.// 将斜杆替换成分隔符,这样就能保证路径是有效的20.basePath = basePath.replace("/", separator);21.return basePath;22.}23.24./**25.* 图片保存的子目录:</br>26.* upload/meilianMall/shop/" + shopId27.* @param shopId28.* @return29.*/30.public static String getShopImagePath(long shopId) {31.// "/upload/item/shop/"+shopId+"/"32.String imagePath = "upload/meilianMall/shop/" + shopId + "/";33.return imagePath.replace("/", separator);34.}35.36.}说明:这个类就是用thumbnails来处理图片的,进行压缩,然后加水印,然后把经过了处理的图片保存到dest目标路径下。
⼀个好⽤的java图⽚缩放及质量压缩⽅法本⽂中代码来⾃:/liuhuanchao/article/details/50527856由于⽹站需要对上传的图⽚进⾏宽度判断缩放和质量压缩,以提升整体加载速度,于是我在⽹上找处理⽅法,⽹上⼤多数是⾕歌图⽚处理组件Thumbnails的介绍。
最开始我⽤Thumbnails尝试,但不知道什么原因,没有任何效果,也不报错。
由于时间的关系,就没再深⼊研究,另寻他路。
后来找到了下⾯的⽅法,这个⽅法优点在于完全基于Java⾃带API,调⽤也⾮常简单,如果只是缩放和压缩,这个⽅法⾜够了。
代码:1/**2 * 缩放图⽚(压缩图⽚质量,改变图⽚尺⼨)3 * 若原图宽度⼩于新宽度,则宽度不变!4 * @param newWidth 新的宽度5 * @param quality 图⽚质量参数 0.7f 相当于70%质量6*/7public static void imageResize(File originalFile, File resizedFile,8int maxWidth,int maxHeight, float quality) throws IOException {910if (quality > 1) {11throw new IllegalArgumentException(12 "图⽚质量需设置在0.1-1范围");13 }1415 ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());16 Image i = ii.getImage();17 Image resizedImage = null;1819int iWidth = i.getWidth(null);20int iHeight = i.getHeight(null);2122int newWidth = maxWidth;23if(iWidth < maxWidth){24 newWidth = iWidth;25 }262728if (iWidth >= iHeight) {29 resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight)30 / iWidth, Image.SCALE_SMOOTH);31 }32333435int newHeight = maxHeight;36if(iHeight < maxHeight){37 newHeight = iHeight;38 }3940if(resizedImage==null && iHeight >= iWidth){41 resizedImage = i.getScaledInstance((newHeight * iWidth) / iHeight,42 newHeight, Image.SCALE_SMOOTH);43 }4445// This code ensures that all the pixels in the image are loaded.46 Image temp = new ImageIcon(resizedImage).getImage();4748// Create the buffered image.49 BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),50 temp.getHeight(null), BufferedImage.TYPE_INT_RGB);5152// Copy image to buffered image.53 Graphics g = bufferedImage.createGraphics();5455// Clear background and paint the image.56 g.setColor(Color.white);57 g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));58 g.drawImage(temp, 0, 0, null);59 g.dispose();6061// Soften.62float softenFactor = 0.05f;63float[] softenArray = { 0, softenFactor, 0, softenFactor,64 1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };65 Kernel kernel = new Kernel(3, 3, softenArray);66 ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);67 bufferedImage = cOp.filter(bufferedImage, null);6869// Write the jpeg to a file.70 FileOutputStream out = new FileOutputStream(resizedFile);7172// Encodes image as a JPEG data stream73 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);7475 JPEGEncodeParam param = encoder76 .getDefaultJPEGEncodeParam(bufferedImage);7778 param.setQuality(quality, true);7980 encoder.setJPEGEncodeParam(param);81 encoder.encode(bufferedImage);82 } // Example usage调⽤:1//图⽚压缩处理(缩放+质量压缩以减⼩⾼宽度及数据量⼤⼩)2 imageResize(imgFile,imgFile,1200,3000,0.9f);//宽度⼤于1200的,缩放为1200,⾼度⼤于3000的缩放为3000,按⽐例缩放,质量压缩掉10%推荐⼀个好⽤的聚合搜索引擎,,⽀持⾕歌、百度、搜狗、bing、360⼀键切换,⽀持⽹页、⾳乐、购物、视频搜索、⽀持抖⾳、快⼿、哔哩哔哩、微信、头条、知乎搜索、⽀持顶部栏、左侧栏两种界⾯模式。
项⽬总结13:Jav⽂件压缩-InputStream转化为base64-Base64解码并⽣成图⽚Jav⽂件压缩-InputStream转化为base64-Base64解码并⽣成图⽚直接上源码,解释见⽂章尾部1package mon.util.imgecode;23import mon.util.Logger;4import net.coobird.thumbnailator.Thumbnails;5import mons.codec.binary.Base64;6import sun.misc.BASE64Decoder;78import javax.imageio.ImageIO;9import java.awt.image.BufferedImage;10import java.io.*;111213public class ImageEncodeUtil {14private final static Logger logger = Logger.getLogger(ImageEncodeUtil.class);1516//1-压缩图⽚17public static InputStream compressFile(InputStream input) throws IOException {18//1-压缩图⽚19 BufferedImage bufImg = ImageIO.read(input);// 把图⽚读⼊到内存中20 bufImg = Thumbnails.of(bufImg).width(100).keepAspectRatio(true).outputQuality(0.2f).asBufferedImage();//压缩:宽度100px,长度⾃适应;质量压缩到0.121 ByteArrayOutputStream bos = new ByteArrayOutputStream();// 存储图⽚⽂件byte数组22 ImageIO.write(bufImg, "jpg", bos); // 图⽚写⼊到 ImageOutputStream23 input = new ByteArrayInputStream(bos.toByteArray());24int available = input.available();25//2-如果⼤⼩超过50KB,继续压缩26if(available > 50000){27 compressFile(input);28 }29return input;3031 }32//2-InputStream转化为base6433public static String getBase64FromInputStream(InputStream in) {34// 将图⽚⽂件转化为字节数组字符串,并对其进⾏Base64编码处理35byte[] data = null;36// 读取图⽚字节数组37try {38 ByteArrayOutputStream swapStream = new ByteArrayOutputStream();39byte[] buff = new byte[100];40int rc = 0;41while ((rc = in.read(buff, 0, 100)) > 0) {42 swapStream.write(buff, 0, rc);43 }44 data = swapStream.toByteArray();45 } catch (IOException e) {46 e.printStackTrace();47 } finally {48if (in != null) {49try {50 in.close();51 } catch (IOException e) {52 e.printStackTrace();53 }54 }55 }56 String str = new String(Base64.encodeBase64(data));57 System.out.println( "str length: " + str.length() + " str: " + str);58return str;59 }6061//3-Base64解码并⽣成图⽚62public static boolean GenerateImage(String base64str,String savepath) { //对字节数组字符串进⾏Base64解码并⽣成图⽚63if (base64str == null) //图像数据为空64return false;65 BASE64Decoder decoder = new BASE64Decoder();66try {67//Base64解码68byte[] b = decoder.decodeBuffer(base64str);69// System.out.println("解码完成");70 for (int i = 0; i < b.length; ++i) {71 if (b[i] < 0) {//调整异常数据(这⼀步很重要)72 b[i] += 256;73 }74 }75//⽣成jpeg图⽚76 OutputStream out = new FileOutputStream(savepath);77 out.write(b);78 out.flush();79 out.close();80return true;81 } catch (Exception e) {82return false;83 }84 }8586public static void main(String[] args) {87try {88 File file = new File("C:\\Users\\tyj\\Desktop\\01.jpg");89 FileInputStream fileInputStream = new FileInputStream(file);90 InputStream inputStream = compressFile(fileInputStream);91 String base64FromInputStream = getBase64FromInputStream(inputStream);92 GenerateImage(base64FromInputStream,"C:\\\\Users\\\\tyj\\\\Desktop\\\\113001.jpg");93 InputStream is =new ByteArrayInputStream(base64FromInputStream.getBytes("UTF-8"));94 System.out.println("compress success");95 } catch (IOException e) {96// TODO Auto-generated catch block97 e.printStackTrace();98 }99 }100101 }1.图⽚压缩使⽤⾕歌thumbnailator,详情可参考:<!-- ⾕歌图⽚压缩 --><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>2-InputStream转化为base643-Base64解码并⽣成图⽚,注意其中的标红部分,调整异常数据(这⼀步很重要)。
缩略图的设计和制作在当今数字化时代,缩略图(Thumbnail)在我们的生活中越来越常见。
无论是在网站上的图片展示、社交媒体平台上的图片分享,还是在手机应用程序中的图标显示,缩略图的设计和制作都起着重要的作用。
本文将探讨缩略图的概念、设计原则和制作方法,帮助读者在创建优秀的缩略图时有所依据。
第一部分:缩略图的概念和作用缩略图是指通过对原始图像的压缩和减小尺寸而得到的小型图像。
它通常以更小的文件大小展示,用于预览原始图像的内容。
缩略图在网页设计、移动应用程序和电子文档中广泛应用,以提高用户体验和节省带宽资源。
第二部分:缩略图的设计原则1. 保持图像清晰度:尽管缩略图的尺寸较小,但仍需保持图像的清晰度和可读性。
避免模糊、失真或过度压缩的情况。
2. 突出主题:缩略图应该能够准确地传达原始图像的主题或核心信息。
选择最能代表原始内容的元素来构造缩略图。
3. 颜色和对比度:使用明亮、鲜艳的颜色和适度的对比度,以吸引用户的注意力。
避免过度花哨或过于单调的色彩搭配。
4. 简洁明了的构图:缩略图应该具备简洁明了的构图,避免复杂的细节或过多的元素。
突出主题,并保持整体的平衡感。
第三部分:缩略图的制作方法1. 图片编辑软件:使用像Adobe Photoshop或GIMP等专业的图片编辑软件来制作和编辑缩略图。
这些工具提供了丰富的调整和优化选项,可满足各种需求。
2. 尺寸调整:将原始图像的尺寸调整为适合缩略展示的大小。
一般而言,缩略图的大小应该在100像素到300像素之间,具体根据使用环境而定。
3. 图像压缩:使用适当的压缩算法和参数,将原始图像的文件大小减小到较小的范围,以便快速加载和显示。
4. 批处理:对于大量的图片制作缩略图时,可以使用批处理功能进行自动化操作,提高效率和一致性。
总结:缩略图在我们的日常生活中发挥着重要的作用,为我们提供更好的用户体验和节省资源。
通过遵循设计原则和使用合适的制作方法,我们可以创建出清晰、吸引人的缩略图。