1. Vignette
Lorsque vous parcourez des albums, vous devrez peut-être générer des miniatures correspondantes.
Téléchargez directement le code:
classe publique ImageUtil {private logger log = loggerfactory.getLogger (getClass ()); chaîne statique privée default_prevfix = "thumb_"; private static Boolean DEFAULT_FORCE = false;//It is recommended that this value be false /** * <p>Title: thumbnailImage</p> * <p>Description: Generate thumbnails based on the image path</p> * @param imagePath Original image path* @param w Thumbnail width* @param h Thumbnail height* @param prevfix Generate the prefix of thumbnails* @param force s'il faut forcer les vignettes à générer en fonction de la largeur et de la hauteur (si fausse, la vignette de meilleure échelle est générée) * / public void thumbnailimage (String ImagePath, int w, int h, string prevFix, boolean force) {file imgfile = new Fichier (imagePath); if (imgfile.exists ()) {try {// Types d'images pris en charge ImageIo: [BMP, BMP, JPG, JPG, WBMP, JPEG, PNG, PNG, JPEG, WBMP, GIFS, GIF] String Types = Arrays.ToString (imageo.getReaderForTName ()); Chaîne suffixe = null; // Obtenez le suffixe de l'image if (imgFile.getName (). Indexof (".")> -1) {suffix = imgfile.getName (). Substring (imgFile.getName (). LastIndexof (".") + 1); } // Le type de type et le suffixe d'image sont tous minuscules, puis déterminez si le suffixe est légal si (suffixe == null || types.tolowercase (). Indexof (suffix.tolowercase ()) <0) {log.Error ("désolé, le suffixe d'image est illégal. Le suffixe d'image standard est {}." + Types); retour ; } log.debug ("Taille de l'image cible, largeur: {}, hauteur: {}.", W, h); Image img = imageo.read (imgfile); if (! Force) {// Trouvez l'échelle miniature la plus appropriée basée sur l'image d'origine et l'échelle de vignette requise int largeur = img.getWidth (null); int hauteur = img.getheight (null); if ((width * 1.0) / w <(height * 1.0) / h) {if (width> w) {h = Integer.parseint (new java.text.decimalformat ("0"). format (hauteur * w / (width * 1.0))); log.debug ("Changer la hauteur de l'image, largeur: {}, hauteur: {}.", w, h); }} else {if (height> h) {w = Integer.parseint (new Java.Text.decimalformat ("0"). Format (largeur * h / (hauteur * 1.0))); log.debug ("Changer la largeur de l'image, largeur: {}, hauteur: {}.", w, h); }}} BufferedImage BI = new BufferedImage (W, H, BufferedImage.Type_int_rgb); Graphiques g = bi.getGraphics (); G.DrawImage (IMG, 0, 0, W, H, Color.light_Gray, null); g.dispose (); String p = imgfile.getPath (); // Enregistrez l'image dans le répertoire d'origine et préfixe ImageIo.write (BI, suffixe, nouveau fichier (p.SubString (0, p.lastIndexof (file.separator)) + file.separator + prevFix + imgfile.getName ())); Log.Debug ("Thumbnail généré avec succès dans le chemin d'origine"); } catch (ioException e) {log.Error ("générer l'image miniature a échoué.", e); }} else {log.warn ("L'image n'existe pas."); }} public static void main (string [] args) {new imageUtil (). thumbnailimage ("c: / users / cm / Desktop / ma page / images / girlnoimg.jpg", 100, 150, default_prevfix, default_force); }}Exécutez directement la méthode principale et remplissez les paramètres correspondants.
2. Coopérer avec JS pour générer des images recadrées
Lorsque nous modifions nos informations personnelles Weibo et QQ, nous pouvons télécharger nos avatars personnels, puis couper nos avatars personnels et les télécharger. La taille et le style des images recadrées sont implémentées via JavaScript, mais elle ne génère pas une nouvelle image. Cependant, les images recadrées JS fournissent les coordonnées X et Y et la largeur et la hauteur de l'image. Grâce à ces quatre paramètres, nous pouvons générer de nouvelles images recadrées en fonction de l'image d'origine.
étape:
1. Premièrement, j'ai utilisé JS pour réaliser la coupe d'image et la fonction de navigation à travers la page. J'ai fait référence aux informations fournies par le MOOC et je l'ai légèrement modifiée. De plus, nous pouvons également utiliser des plug-ins, comme JCROP, qui est un très bon plug-in de recadrage d'images.
Télécharger l'adresse: http://download.csdn.net/detail/U012385190/9733480
Le rendu final est le plus ci-dessus. Vous pouvez faire glisser et faire glisser à gauche et l'image d'aperçu à droite.
2. Java génère et enregistre des images coupées
classe publique ImageUtil2 {private logger log = loggerfactory.getLogger (getClass ()); chaîne statique privée default_cut_prevfix = "Cut_"; / ** * Description: Intercepter les images locales basées sur l'image d'origine et la taille du recadrage * @Param Srcimg Image source * @param Sortie Image Stream Structure * @param rect Les coordonnées et la taille de la pièce doivent être interceptées * / public Void CutImage (Fichier Srcimg, OutputStream Sortie, Java.awt.Rectangle RECT) {if (srcimg.exists () {) java.io.fileInputStream fis = null; ImageInputStream iis = null; try {fis = new FileInputStream (srcimg); // Types d'images pris en charge ImageIo: [BMP, BMP, JPG, JPG, WBMP, JPEG, PNG, PNG, // JPEG, WBMP, GIF, GIF] Types de chaînes = Arrays.ToString (imageo.getReaderFormatNames ()). Chaîne suffixe = null; // obtient le suffixe de l'image if (srcimg.getName (). Indexof (".")> -1) {suffix = srcimg.getName (). Substring (srcimg.getName (). LastIndexof (".") + 1); } // Le type de type et le suffixe d'image sont tous en minuscules, puis déterminez si le suffixe est légal si (suffixe == null || types.tolowercase (). Indexof (suffixe.tolowercase () + ",") <0) {log.Error ("Désolé, le suffixe de l'image est illégal. La situation d'image standard est {}." + Types); retour; } // Convertir FileInputStream en imageInputStream iis = imageo.CreateImageInputStream (fis); // Obtenez l'imageReader de ce type en fonction du type d'image ImageReader Reader = imageo.getImageRedersBySuffix (suffixe) .next (); Reader.SetInput (iis, true); ImageReadParam param = reader.getDefaulTreadParam (); Param.SetSourceRegion (REct); BufferedImage Bi = Reader.read (0, param); Imageo.write (bi, suffixe, sortie); Log.info ("L'image est générée avec succès, veuillez aller au répertoire pour afficher"); } catch (filenotFoundException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } enfin {try {if (fis! = null) fis.close (); if (iis! = null) iis.close (); } catch (ioException e) {e.printStackTrace (); }}} else {log.warn ("L'image src n'existe pas."); }} // Générez le chemin de fichier cible public void cutImage (fichier srcimg, string détimgpath, java.awt.rectangle rect) {file détimg = new file (detimgPath); if (destimg.exists ()) {String p = detimg.getPath (); essayez {if (! Destimg.isDirectory ()) p = destimg.getParent (); if (! P.endswith (file.separator)) p = p + file.separator; CutImage (Srcimg, new Java.io.FileOutputStream (P + Default_cut_prevfix + "_" + srcimg.getName ()), rect); } catch (filenotfoundException e) {log.warn ("L'image dest n'existe pas."); }} else log.warn ("Le dossier d'image dest n'existe pas."); } public void CutImage (String srcimg, String Destimg, int x, int y, int width, int height) {cutimage (nouveau fichier (srcimg), détimg, new java.awt.rectangle (x, y, width, height)); } public static void main (String [] args) {new ImageUtil2 (). Cutimage ("c: / users / cm / Desktop / ma page / images / boynoimg.jpg", "c: / users / cm / bureau / ma page / images / imgs", 0, 0, 61, 166); // new ImageUtil2 (). Cutimage ("c: /users/cm/desktop/jcrop-master/demos/demo_files/sago.jpg", "c: / users / cm / Desktop / ma page / images / imgs", 124, 110, 196, 176); }}Cette méthode peut être exécutée directement en main. Les quatre paramètres passés sont le chemin d'image, la valeur gauche, la valeur supérieure, la longueur et la largeur.
Analysons comment obtenir ces quatre paramètres:
1. En prenant ma coupe JS à titre d'exemple, je reçois ce qui suit par F12:
La partie rouge de l'image est la div de la coupe d'image. Nous pouvons observer quels paramètres ont été modifiés en faisant glisser la taille et la largeur de la zone de découpage, etc., puis déterminez les valeurs des paramètres correspond aux valeurs spécifiques des paramètres correspondants. Comme sur l'image, mon x / y / largeur / hauteur est respectivement de 40,28,224,228.
Remarque: Dans JS, je définis la longueur et la largeur de la div et de l'image comme 300 * 300. Afin de coopérer avec le test, l'image que j'ai téléchargée est également 300 * 300. Si la taille de l'image que vous avez testée n'est pas 300 * 300, alors l'effet que vous avez testé directement dans Java ci-dessus sera différent de ce que vous voyez à l'avant, car je définis la largeur et la hauteur de votre image frontale comme 300 * 300, tandis que votre image réelle (c'est-à-dire l'image en Java) ne l'est pas.
Et si ce problème est traité?
Obtenez la longueur et la largeur de l'image d'origine dans votre code Java, puis déterminez si la longueur et la largeur de l'image d'origine sont 300 * 300. Sinon, générez une miniature 300 * 300 de l'image, puis utilisez la miniature 300 * 300 comme prototype d'image recadrée. (Mon code ne le traite pas, je le traiterai moi-même si j'en ai besoin et supprime les miniatures après avoir utilisé l'image)
2. Jcrop obtient des paramètres
Comme le montre la figure, JCROP fournit directement des paramètres et peut être utilisé directement. Mais un inconvénient est que la zone de taille d'image de la page frontale n'est pas fixe. Si vous avez une grande image de pixels, ce sera très laid. Par exemple, si j'ai une image SOGA_BAK.jpg Dans le fichier correspondant, ce sera mauvais si je le remplace par cette image.
Ainsi, en résumé, il est recommandé d'utiliser le premier JS, puis de déterminer si la longueur et la largeur de l'image d'origine sont de 300 et générer une miniature 300 * 300, puis utilisez la vignette comme prototype de recadrage, puis supprimez la vignette après l'avoir utilisée.
Ce qui précède est l'exemple de la méthode de la recadrage d'images Java et de la génération de miniatures qui vous sont présentées par l'éditeur. Il s'agit d'un problème non valide pour les demandes de GET. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!