Comment générer automatiquement des images miniatures en Java
一、自动生成缩略图方法:
package writeimg; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class JpegTool { private boolean isInitFlag = false; // 对象是否己经初始化 private String pic_big_pathfilename = null; //定义源图片所在的带路径目录的文件名 private String pic_small_pathfilename = null; // 生成小图片的带存放路径目录的文件名 private int smallpicwidth = 0; //定义生成小图片的宽度和高度,给其一个就可以了 private int smallpicheight = 0; private int pic_big_width=0; private int pic_big_height=0; private double picscale = 0; //定义小图片的相比原图片的比例 /** * 构造函数 * @param 没有参数 */ public JpegTool(){ this.isInitFlag = false; } /** * 私有函数,重置所有的参数 * @param 没有参数 * @return 没有返回参数 */ private void resetJpegToolParams(){ this.picscale = 0; this.smallpicwidth = 0; this.smallpicheight = 0; this.isInitFlag = false; } /** * @param scale 设置缩影图像相对于源图像的大小比例如 0.5 * @throws JpegToolException */ public void SetScale(double scale) throws JpegToolException { if(scale<=0){ throw new JpegToolException(" 缩放比例不能为 0 和负数! "); } this.resetJpegToolParams(); this.picscale = scale; this.isInitFlag = true; } /** * @param smallpicwidth 设置缩影图像的宽度 * @throws JpegToolException */ public void SetSmallWidth(int smallpicwidth) throws JpegToolException { if(smallpicwidth<=0) { throw new JpegToolException(" 缩影图片的宽度不能为 0 和负数! "); } this.resetJpegToolParams(); this.smallpicwidth = smallpicwidth; this.isInitFlag = true; } /** * @param smallpicheight 设置缩影图像的高度 * @throws JpegToolException */ public void SetSmallHeight(int smallpicheight) throws JpegToolException { if(smallpicheight<=0) { throw new JpegToolException(" 缩影图片的高度不能为 0 和负数! "); } this.resetJpegToolParams(); this.smallpicheight = smallpicheight; this.isInitFlag = true; } /** *返回大图片路径 */ public String getpic_big_pathfilename() { return this.pic_big_pathfilename; } /** * 返回小图片路径 */ public String getpic_small_pathfilename() { return this.pic_small_pathfilename; } public int getsrcw() { return this.pic_big_width; } public int getsrch() { return this.pic_big_height; } /** * 生成源图像的缩影图像 * @param pic_big_pathfilename 源图像文件名,包含路径(如 windows 下 C:\\pic.jpg ; Linux 下 /home/abner/pic/pic.jpg ) * @param pic_small_pathfilename 生成的缩影图像文件名,包含路径(如 windows 下 C:\\pic_small.jpg ; Linux 下 /home/abner/pic/pic_small.jpg ) * @throws JpegToolException */ public void doFinal(String pic_big_pathfilename,String pic_small_pathfilename) throws JpegToolException { if(!this.isInitFlag){ throw new JpegToolException(" 对象参数没有初始化! "); } if(pic_big_pathfilename==null || pic_small_pathfilename==null){ throw new JpegToolException(" 包含文件名的路径为空! "); } if((!pic_big_pathfilename.toLowerCase().endsWith("jpg")) && (!pic_big_pathfilename.toLowerCase().endsWith("jpeg"))){ throw new JpegToolException(" 只能处理 JPG/JPEG 文件! "); } if((!pic_small_pathfilename.toLowerCase().endsWith("jpg")) && !pic_small_pathfilename.toLowerCase().endsWith("jpeg")){ throw new JpegToolException(" 只能处理 JPG/JPEG 文件! "); } this.pic_big_pathfilename=pic_big_pathfilename; this.pic_small_pathfilename=pic_small_pathfilename; int smallw = 0; int smallh = 0; // 新建源图片和生成的小图片的文件对象 File fi = new File(pic_big_pathfilename); File fo = new File(pic_small_pathfilename); //生成图像变换对象 AffineTransform transform = new AffineTransform(); //通过缓冲读入源图片文件 BufferedImage bsrc = null; try { bsrc = ImageIO.read(fi); }catch (IOException ex) { throw new JpegToolException(" 读取源图像文件出错! "); } this.pic_big_width= bsrc.getWidth();// 原图像的长度 this.pic_big_height = bsrc.getHeight();// 原图像的宽度 double scale = (double)pic_big_width/pic_big_height;// 图像的长宽比例 if(this.smallpicwidth!=0) {// 根据设定的宽度求出长度 smallw = this.smallpicwidth;// 新生成的缩略图像的长度 smallh = (smallw*pic_big_height)/pic_big_width ;// 新生成的缩略图像的宽度 } else if(this.smallpicheight!=0) {// 根据设定的长度求出宽度 smallh = this.smallpicheight;// 新生成的缩略图像的长度 smallw = (smallh*pic_big_width)/pic_big_height;// 新生成的缩略图像的宽度 } else if(this.picscale!=0) {// 根据设置的缩小比例设置图像的长和宽 smallw = (int)((float)pic_big_width*this.picscale); smallh = (int)((float)pic_big_height*this.picscale); } else { throw new JpegToolException(" 对象参数初始化不正确! "); } double sx = (double)smallw/pic_big_width;//小/大图像的宽度比例 double sy = (double)smallh/pic_big_height;//小/大图像的高度比例 transform.setToScale(sx,sy);// 设置图像转换的比例 //生成图像转换操作对象 AffineTransformOp ato = new AffineTransformOp(transform,null); //生成缩小图像的缓冲对象 BufferedImage bsmall = new BufferedImage(smallw,smallh,BufferedImage.TYPE_3BYTE_BGR); //生成小图像 ato.filter(bsrc,bsmall); //输出小图像 try{ ImageIO.write(bsmall, "jpeg", fo); } catch (IOException ex1) { throw new JpegToolException(" 写入缩略图像文件出错! "); } } }
二、异常处理类:
package jpegtool; public class JpegToolException extends Exception { private String errMsg = ""; public JpegToolException(String errMsg) { this.errMsg = errMsg; } public String getMsg(){ return "JpegToolException:"+this.errMsg; } }
三、调用的例子:
package writeimg; public class T { public static void main(String[] args) { JpegTool j = new JpegTool(); try { j.SetScale(0.7); j.SetSmallHeight(100); j.doFinal("D:\\305\\c\\javatest\\src\\11.jpg","D:\\305\\c\\javatest\\src\\22.jpg"); } catch (JpegToolException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
