最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java input 調(diào)用手機相機和本地照片上傳圖片到服務(wù)器然后壓縮的方法

 更新時間:2018年08月19日 10:09:04   作者:*眉間緣*  
今天小編就為大家分享一篇java input 實現(xiàn)調(diào)用手機相機和本地照片上傳圖片到服務(wù)器然后壓縮的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在微信公眾號里面需要上傳頭像,時間比較緊,調(diào)用學(xué)習(xí)jssdk并使用 來不及 就用了input

1、使用input:file標(biāo)簽, 去調(diào)用系統(tǒng)默認(rèn)相機,攝像,錄音功能,其實是有個capture屬性,直接說明需要調(diào)用什么功能

<input type="file" accept="image/*" capture="camera">

<input type="file" accept="video/*" capture="camcorder">

<input type="file" accept="audio/*" capture="microphone">

capture表示,可以捕獲到系統(tǒng)默認(rèn)的設(shè)備,比如:camera--照相機;camcorder--攝像機;microphone--錄音。

accept表示,直接打開系統(tǒng)文件目錄。

2、input:file標(biāo)簽還支持一個multiple屬性,表示可以支持多選,如:

<input type="file" accept="image/*" multiple>

加上這個multiple后,capture就沒啥用了,因為multiple是專門用來支持多選的。

用form表單提交

<form id="uploadForm" class="mui-input-group" style="width: 80%;margin: 0 auto;margin-top: 70px" action="/jxs/uploadtou.do" method="post" enctype="multipart/form-data" >
  <div class="mui-input-row">
   <label>圖片</label>
   <input required="required" class="mui-input-clear mui-input" type="file" name="file" id="photo_pick" accept="image/*">
  </div>

  <div class="mui-content-padded" style="width: 90%;margin: 0 auto;margin-top: 5px;padding: 10px">
   <input style="color:#FFFFFF ;width: 100%;background: #00F7DE" value="上傳" type="submit">
  </div>
 </form>

上傳之后圖片顯示在頁面上

<div class="progress_dialog" style="margin-left:30px;margin-top:20px;width: 50%;height: 50%;"></div>

js

<script>
 /*圖片地址
 https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E9%AB%98%E6%B8%85%E7%BE%8E%E5%A5%B3%20%E4%B8%9D%E8%A2%9C%E5%B7%A8%E4%B9%B3&step_word=&hs=0&pn=1&spn=0&di=57234189540&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=3589338782%2C536437810&os=3988412231%2C488396405&simid=3515890414%2C233897128&adpicid=0&lpn=0&ln=1389&fr=&fmq=1490709487003_R&fm=result&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fwww.bz55.com%2Fuploads%2Fallimg%2F150416%2F139-1504161AK9.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bkzcc_z%26e3Bv54AzdH3F4jtgektzitAzdH3F8l9c9_z%26e3Bip4s&gsm=0&rpstart=0&rpnum=0
 */
 $(function() {
  $("#photo_pick").on("change", function () {
   var file = this.files[0];
   photoCompress(file, 50, $(".progress_dialog")[0])
   $(".progress_dialog").show();
   if (!this.files.length) return;
   var files = Array.prototype.slice.call(this.files);
   if (files.length > 9) {
    alert("最多同時只可上傳9張圖片");
    return;
   }
  /* files.forEach(function (file, i) {
    /!*var reader = new FileReader();
    reader.onload = function () {
     var imgO = document.createElement("img");
     imgO.src = reader.result;
    }*!/
    reader.readAsDataURL(file);
    $(".progress_dialog").hide();*/
   });
  })


  /*
 三個參數(shù)
 file:一個是文件(類型是圖片格式),
 w:一個是文件壓縮的后寬度,寬度越小,字節(jié)越小
 objDiv:一個是容器或者回調(diào)函數(shù)
 photoCompress()
  */
  function photoCompress(file, w, objDiv) {
   var ready = new FileReader();
   /*開始讀取指定的Blob對象或File對象中的內(nèi)容. 當(dāng)讀取操作完成時,readyState屬性的值會成為DONE,如果設(shè)置了onloadend事件處理程序,則調(diào)用之.同時,result屬性中將包含一個data: URL格式的字符串以表示所讀取文件的內(nèi)容.*/
   ready.readAsDataURL(file);
   ready.onload = function () {
    var re = this.result;
    canvasDataURL(re, w, objDiv)

   }
  }

  function canvasDataURL(re, w, objDiv) {
   var newImg = new Image();
   newImg.src = re;
   var imgWidth, imgHeight, offsetX = 0, offsetY = 0;
   newImg.onload = function () {
    var img = document.createElement("img");
    img.src = newImg.src;
    imgWidth = img.width;
    imgHeight = img.height;
    var canvas = document.createElement("canvas");
    canvas.width = w;
    canvas.height = w;
    var ctx = canvas.getContext("2d");
    ctx.clearRect(0, 0, w, w);
    if (imgWidth > imgHeight) {
     imgWidth = w * imgWidth / imgHeight;
     imgHeight = w;
     offsetX = -Math.round((imgWidth - w) / 6);
    } else {
     imgHeight = w * imgHeight / imgWidth;
     imgWidth = w;
     offsetY = -Math.round((imgHeight - w) / 6);
    }
    ctx.drawImage(img, offsetX, offsetY, imgWidth, imgHeight);
    var base64 = canvas.toDataURL("image/jpeg", 0.1);
    if (typeof objDiv == "object") {
     objDiv.appendChild(canvas);
    } else if (typeof objDiv == "function") {
     objDiv(base64);
    }
   }

 }
</script>

后臺接收以及壓縮

@PostMapping("/uploadtou.do")
 public String uploadtou(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) throws IOException {
  System.out.println(file);
  String result = "";
  if (!file.isEmpty()) {
   try {
    Shopuser u = (Shopuser) request.getSession().getAttribute("currentUser");
    String extName = file.getOriginalFilename();
    String fileName = file.getName();
    String suffix = extName.substring(extName.lastIndexOf(".") + 1);
    System.err.println(suffix);
    Date now = new Date();
    SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    String s = outFormat.format(now);
    BufferedOutputStream bos = new BufferedOutputStream(
      new FileOutputStream(new File("D:\\xiangmu\\demo\\" + s + "." + suffix)));
    bos.write(file.getBytes());
    bos.flush();
    bos.close();
    /**
     * compress 圖片縮放類的使用(縮略圖)
     * srcImage 為InputStream對象
     * Rectangle 為需要截圖的長方形坐標(biāo)
     * proportion 為壓縮比例
     * **/
    InputStream in = null;
    //縮放后需要保存的路徑
    File saveFile = new File("D:\\xiangmu\\demo\\" + s + s + "." + suffix);
    try {
     //原圖片的路徑
     in = new FileInputStream(new File("D:\\xiangmu\\demo\\" + s + "." + suffix));
     int length = in.available();
     if (length / 1024 >= 10 && length / 1024 < 100) {
      if (compress(in, saveFile, 10)) {
       System.out.println("圖片壓縮十倍!");
      }
     } else if (length / 1024 >= 100 && length / 1024 < 1000) {
      if (compress(in, saveFile, 100)) {
       System.out.println("圖片壓縮100倍!");
      }
     } else if (length / 1024 >= 1000 && length / 1024 < 10000) {
      if (compress(in, saveFile, 1000)) {
       System.out.println("圖片壓縮1000倍!");
      }
     } else if (length / 1024 < 10 && length / 1024 > 0) {
      if (compress(in, saveFile, 1)) {
       System.out.println("圖片壓縮1倍!");
      }
     }

    } catch (Exception e) {
     e.printStackTrace();
    } finally {
     in.close();
    }
    String filename = "/Path/" + s + s + "." + suffix;//服務(wù)器地址
    System.out.println(filename);
    int a = shopService.updateImg(u.getId(), filename);
    System.out.println(filename);
   } catch (Exception e) {
    e.printStackTrace();
   }
  } else {
  }

  return "wode.html";
 }

圖片處理類

package com.example.springbootshop.util;

import org.junit.Test;

import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;





/**
 * 圖片工具類,完成圖片的截取
 * 所有方法返回值均未boolean型
 */
public class ImageHelper {
 /**
  * 實現(xiàn)圖像的等比縮放
  * @param source
  * @param targetW
  * @param targetH
  * @return
  */
 private static BufferedImage resize(BufferedImage source, int targetW,
          int targetH) {
  // targetW,targetH分別表示目標(biāo)長和寬
  int type = source.getType();
  BufferedImage target = null;
  double sx = (double) targetW / source.getWidth();
  double sy = (double) targetH / source.getHeight();
  // 這里想實現(xiàn)在targetW,targetH范圍內(nèi)實現(xiàn)等比縮放。如果不需要等比縮放
  // 則將下面的if else語句注釋即可
  if (sx < sy) {
   sx = sy;
   targetW = (int) (sx * source.getWidth());
  } else {
   sy = sx;
   targetH = (int) (sy * source.getHeight());
  }
  if (type == BufferedImage.TYPE_CUSTOM) { // handmade
   ColorModel cm = source.getColorModel();
   WritableRaster raster = cm.createCompatibleWritableRaster(targetW,
     targetH);
   boolean alphaPremultiplied = cm.isAlphaPremultiplied();
   target = new BufferedImage(cm, raster, alphaPremultiplied, null);
  } else
   target = new BufferedImage(targetW, targetH, type);
  Graphics2D g = target.createGraphics();
  // smoother than exlax:
  g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BICUBIC);
  g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
  g.dispose();
  return target;
 }

 /**
  * 實現(xiàn)圖像的等比縮放和縮放后的截取, 處理成功返回true, 否則返回false
  * @param inFilePath 要截取文件的路徑
  * @param outFilePath 截取后輸出的路徑
  * @param width 要截取寬度
  * @param hight 要截取的高度
  * @throws Exception
  */
 public static boolean compress(String inFilePath, String outFilePath,
         int width, int hight) {
  boolean ret = false;
  File file = new File(inFilePath);
  File saveFile = new File(outFilePath);
  InputStream in = null;
  try {
   in = new FileInputStream(file);
   ret = compress(in, saveFile, width, hight);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
   ret = false;
  } finally{
   if(null != in){
    try {
     in.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }

  return ret;
 }

 /**
  * 實現(xiàn)圖像的等比縮放和縮放后的截取, 處理成功返回true, 否則返回false
  * @param in 要截取文件流
  * @param outFilePath 截取后輸出的路徑
  * @param width 要截取寬度
  * @param hight 要截取的高度
  * @throws Exception
  */
 public static boolean compress(InputStream in, File saveFile,
         int width, int hight) {
//  boolean ret = false;
  BufferedImage srcImage = null;
  try {
   srcImage = ImageIO.read(in);
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }

  if (width > 0 || hight > 0) {
   // 原圖的大小
   int sw = srcImage.getWidth();
   int sh = srcImage.getHeight();
   // 如果原圖像的大小小于要縮放的圖像大小,直接將要縮放的圖像復(fù)制過去
   if (sw > width && sh > hight) {
    srcImage = resize(srcImage, width, hight);
   } else {
    String fileName = saveFile.getName();
    String formatName = fileName.substring(fileName
      .lastIndexOf('.') + 1);
    try {
     ImageIO.write(srcImage, formatName, saveFile);
    } catch (IOException e) {
     e.printStackTrace();
     return false;
    }
    return true;
   }
  }
  // 縮放后的圖像的寬和高
  int w = srcImage.getWidth();
  int h = srcImage.getHeight();
  // 如果縮放后的圖像和要求的圖像寬度一樣,就對縮放的圖像的高度進行截取
  if (w == width) {
   // 計算X軸坐標(biāo)
   int x = 0;
   int y = h / 2 - hight / 2;
   try {
    saveSubImage(srcImage, new Rectangle(x, y, width, hight), saveFile);
   } catch (IOException e) {
    e.printStackTrace();
    return false;
   }
  }
  // 否則如果是縮放后的圖像的高度和要求的圖像高度一樣,就對縮放后的圖像的寬度進行截取
  else if (h == hight) {
   // 計算X軸坐標(biāo)
   int x = w / 2 - width / 2;
   int y = 0;
   try {
    saveSubImage(srcImage, new Rectangle(x, y, width, hight), saveFile);
   } catch (IOException e) {
    e.printStackTrace();
    return false;
   }
  }

  return true;
 }

 /**
  * 實現(xiàn)圖像的等比縮放和縮放后的截取, 處理成功返回true, 否則返回false
  * @param in 圖片輸入流
  * @param saveFile 壓縮后的圖片輸出流
  * @param proportion 壓縮比
  * @throws Exception
  */
 public static boolean compress(InputStream in, File saveFile, int proportion) {
  if(null == in
    ||null == saveFile
    ||proportion < 1){// 檢查參數(shù)有效性
   //LoggerUtil.error(ImageHelper.class, "--invalid parameter, do nothing!");
   return false;
  }

  BufferedImage srcImage = null;
  try {
   srcImage = ImageIO.read(in);
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
  // 原圖的大小
  int width = srcImage.getWidth() / proportion;
  int hight = srcImage.getHeight() / proportion;

  srcImage = resize(srcImage, width, hight);

  // 縮放后的圖像的寬和高
  int w = srcImage.getWidth();
  int h = srcImage.getHeight();
  // 如果縮放后的圖像和要求的圖像寬度一樣,就對縮放的圖像的高度進行截取
  if (w == width) {
   // 計算X軸坐標(biāo)
   int x = 0;
   int y = h / 2 - hight / 2;
   try {
    saveSubImage(srcImage, new Rectangle(x, y, width, hight), saveFile);
   } catch (IOException e) {
    e.printStackTrace();
    return false;
   }
  }
  // 否則如果是縮放后的圖像的高度和要求的圖像高度一樣,就對縮放后的圖像的寬度進行截取
  else if (h == hight) {
   // 計算X軸坐標(biāo)
   int x = w / 2 - width / 2;
   int y = 0;
   try {
    saveSubImage(srcImage, new Rectangle(x, y, width, hight), saveFile);
   } catch (IOException e) {
    e.printStackTrace();
    return false;
   }
  }

  return true;
 }

 /**
  * 實現(xiàn)縮放后的截圖
  * @param image 縮放后的圖像
  * @param subImageBounds 要截取的子圖的范圍
  * @param subImageFile 要保存的文件
  * @throws IOException
  */
 private static void saveSubImage(BufferedImage image,
          Rectangle subImageBounds, File subImageFile) throws IOException {
  if (subImageBounds.x < 0 || subImageBounds.y < 0
    || subImageBounds.width - subImageBounds.x > image.getWidth()
    || subImageBounds.height - subImageBounds.y > image.getHeight()) {
   //LoggerUtil.error(ImageHelper.class, "Bad subimage bounds");
   return;
  }
  BufferedImage subImage = image.getSubimage(subImageBounds.x,subImageBounds.y, subImageBounds.width, subImageBounds.height);
  String fileName = subImageFile.getName();
  String formatName = fileName.substring(fileName.lastIndexOf('.') + 1);
  ImageIO.write(subImage, formatName, subImageFile);
 }


 @Test
 public static void main(String[] args) throws Exception {

  /**
   * saveSubImage 截圖類的使用
   * srcImage 為BufferedImage對象
   * Rectangle 為需要截圖的長方形坐標(biāo)
   * saveFile 需要保存的路徑及名稱
   * **/
  //需要截圖的長方形坐標(biāo)
  /*Rectangle rect =new Rectangle();
  rect.x=40;
  rect.y=40;
  rect.height=160;
  rect.width=160;

  InputStream in = null;
  //需要保存的路徑及名稱
  File saveFile = new File("d:\\ioc\\files\\aaa2.jpg");
  //需要進行處理的圖片的路徑
  in = new FileInputStream(new File("d:\\ioc\\files\\aaa.jpg"));
  BufferedImage srcImage = null;
  //將輸入的數(shù)據(jù)轉(zhuǎn)為BufferedImage對象
  srcImage = ImageIO.read(in);

  ImageHelper img=new ImageHelper();
  img.saveSubImage(srcImage, rect, saveFile);*/

  /**
   * compress 圖片縮放類的使用(縮略圖)
   * srcImage 為InputStream對象
   * Rectangle 為需要截圖的長方形坐標(biāo)
   * proportion 為壓縮比例
   * **/
  InputStream in = null;
  //縮放后需要保存的路徑
  File saveFile = new File("D:\\xiangmu\\demo\\20180523192742IMG_0049123.jpg");
  try {
   //原圖片的路徑
   in = new FileInputStream(new File("D:\\xiangmu\\demo\\20180523192742IMG_0049.jpg"));
   if(compress(in, saveFile, 10)){
    System.out.println("圖片壓縮十倍!");
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   in.close();
  }
 }
}

以上這篇java input 調(diào)用手機相機和本地照片上傳圖片到服務(wù)器然后壓縮的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java AQS(AbstractQueuedSynchronizer)源碼解析

    Java AQS(AbstractQueuedSynchronizer)源碼解析

    AbstractQueuedSynchronizer被稱為隊列同步器,簡稱為大家熟知的AQS,這個類可以稱作concurrent包的基礎(chǔ)。本文將通過剖析源碼來看看AQS是如何工作的,感興趣的可以了解一下
    2023-02-02
  • Java零基礎(chǔ)精通方法篇

    Java零基礎(chǔ)精通方法篇

    方法,也稱函數(shù),如果想要重復(fù)一段或者多段代碼塊的使用,可以將這些代碼封裝成一個方法,方法具體表現(xiàn)為某種行為,使用方法可以提高代碼的復(fù)用性
    2022-05-05
  • Java SpringMVC異常處理機制詳解

    Java SpringMVC異常處理機制詳解

    這篇文章主要介紹了springmvc如何進行異常處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-09-09
  • 淺談同步監(jiān)視器之同步代碼塊、同步方法

    淺談同步監(jiān)視器之同步代碼塊、同步方法

    下面小編就為大家?guī)硪黄獪\談同步監(jiān)視器之同步代碼塊、同步方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Tomcat+JDK安裝和配置教程

    Tomcat+JDK安裝和配置教程

    這篇文章主要為大家詳細(xì)介紹了Tomcat+JDK安裝和配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java中實現(xiàn)訂單超時自動取消功能(最新推薦)

    Java中實現(xiàn)訂單超時自動取消功能(最新推薦)

    本文介紹了Java中實現(xiàn)訂單超時自動取消功能的幾種方法,包括定時任務(wù)、JDK延遲隊列、Redis過期監(jiān)聽、Redisson分布式延遲隊列、RocketMQ延遲消息和RabbitMQ死信隊列,每種方法都有其優(yōu)缺點,可以根據(jù)具體需求選擇合適的方法,感興趣的朋友一起看看吧
    2025-02-02
  • Java通過正則表達(dá)式獲取域名簡單示例

    Java通過正則表達(dá)式獲取域名簡單示例

    在Java中可以使用正則表達(dá)式來從字符串中匹配和提取域名,下面這篇文章主要給大家介紹了關(guān)于Java通過正則表達(dá)式獲取域名的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java程序員必備的11大IntelliJ插件(附地址)

    Java程序員必備的11大IntelliJ插件(附地址)

    這篇文章主要介紹了Java程序員必備的11大IntelliJ插件(附地址),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Spring靜態(tài)代理和動態(tài)代理代碼詳解

    Spring靜態(tài)代理和動態(tài)代理代碼詳解

    這篇文章主要介紹了Spring靜態(tài)代理和動態(tài)代理代碼詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java使用EasyExcel生成動態(tài)表頭和多Sheet數(shù)據(jù)的Excel實例

    Java使用EasyExcel生成動態(tài)表頭和多Sheet數(shù)據(jù)的Excel實例

    這篇文章主要介紹了Java使用EasyExcel生成動態(tài)表頭和多Sheet數(shù)據(jù)的Excel實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評論

盱眙县| 永春县| 榆林市| 太和县| 古丈县| 台南市| 新乡市| 宁夏| 湖州市| 黔西县| 定边县| 类乌齐县| 班戈县| 株洲县| 无锡市| 分宜县| 岳阳县| 山西省| 连山| 石首市| 镇远县| 滨海县| 芦山县| 锡林浩特市| 府谷县| 沽源县| 天长市| 新民市| 精河县| 五原县| 黑河市| 扎赉特旗| 壤塘县| 临沧市| 策勒县| 天水市| 元朗区| 芷江| 大庆市| 沭阳县| 陕西省|