ipcloud上传裁切图片,保存为base64再压缩传给后台

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
    <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
    <title>Hello APP</title>
    <link rel="stylesheet" type="text/css" href="./css/api.css" />
    <style type="text/css">
    html,body{
        height: 100%;
    }
    #wrap{
        height: 100%;
        display: -webkit-box;
        display: -webkit-flex;
        display: flex;
        -webkit-box-orient: vertical;
        -webkit-flex-flow: column;
               flex-flow: column;
    }
    #header{
        text-align: center; background-color: #81a9c3; color: #fff;
        width: 100%;
    }
    #header h1{
        font-size: 20px; height: 44px; line-height: 44px; margin: 0em; color: #fff;
    }
    #main{
        -webkit-box-flex: 1;
        -webkit-flex: 1;
        flex: 1;
    }
    #footer{
        height: 30px; line-height: 30px;
        background-color: #81a9c3;
        width: 100%;
        text-align: center;
    }
    #footer h5{
        color: white;
    }
    .con{font-size: 28px; text-align: center;}
    </style>
</head>
<body>
    <div id="wrap">
        <div id="header">
            <h1>cutcut</h1>
        </div>
        <div id="main">
            <button class="uploadBtn" type="text" onclick="getPicture();" style="position: relative;left:50%; margin-left:-50px;width:100px;height:50px;background-color: pink;border:none;">点击上传图片</button>
            <div class="imgBox" style="position:relative;width:200px;height:200px;border:1px solid red;">
                <img id="imgUp" style="width:100%;height:100%;" src=""/>
            </div>
        </div>
        <div id="footer">
            <h5>Copyright &copy;<span id="year"></span> </h5>
        </div>
    </div>
</body>
<script type="text/javascript" src="script/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="./script/api.js"></script>
<script type="text/javascript">
function getPicture() {
    api.confirm({
      title : "提示",
      msg : "选择图片",
      buttons : ["现在照", "相册选", "取消"]
    }, function(ret, err) {
      //定义图片来源类型
      var sourceType;
      if (1 == ret.buttonIndex) {/* 打开相机*/
        sourceType = "camera";
        openPicture(sourceType);
      } else if (2 == ret.buttonIndex) {
        sourceType = "album";
        openPicture(sourceType);
      } else {
        return;
      }
      });
 }
  //  选取图片
function openPicture(sourceType) {
  var q = 100;
  //获取一张图片
  api.getPicture({
    sourceType : sourceType,
    encodingType : ‘png‘,
    mediaValue : ‘pic‘,
    //返回数据类型,指定返回图片地址或图片经过base64编码后的字符串
    //base64:指定返回数据为base64编码后内容,url:指定返回数据为选取的图片地址
    destinationType : ‘url‘,
    //是否可以选择图片后进行编辑,支持iOS及部分安卓手机
    allowEdit : false,
    //图片质量,只针对jpg格式图片(0-100整数),默认值:50
    quality : q,
    //                targetWidth : 100,
    //                targetHeight : 1280,
    saveToPhotoAlbum : true
  }, function(ret, err) {
    if (ret) {
      /*
       * data:"",                //图片路径
       base64Data:"",          //base64数据,destinationType为base64时返回
       */
      var img_url = ret.data;
      if (img_url != "") {
        //打开裁剪frame
        openImageClipFrame(img_url);
      }
    }
  });
}
    // 打开图片裁剪页面
function openImageClipFrame(img_src){
  api.openFrame({
    name : ‘main‘,
    scrollToTop : true,
    allowEdit : true,
    url : ‘html/main.html‘,
    rect : {
      x : 0,
      y : 0,
      w : api.winWidth,
      h : api.winHeight,
    },
    animation : {
      type : "reveal", //动画类型(详见动画类型常量)
      subType : "from_right", //动画子类型(详见动画子类型常量)
      duration : 300
    },
    pageParam : {
      img_src : img_src,
    },
    vScrollBarEnabled : false,
    hScrollBarEnabled : false,
    //页面是否弹动 为了下拉刷新使用
    bounces : false
  });
}
apiready = function() {
api.addEventListener({
    name:‘clip_success‘
}, function(ret, err){
    if( ret ){
         var jsonstr= JSON.stringify(ret);
         for (var key in ret)
           {
               for (var key2 in ret[key]){
                  var st1=JSON.stringify(ret[key][key2]).replace(‘"‘,‘‘);
                  var st1=st1.replace(‘"‘,‘‘);
                    function getBase64Image(img1) {
                            var cvs = document.createElement("canvas");
                            var width = img1.width;
                            height = img1.height;
                              var scale = width / height;
                              width1 = 720;
                            height1 = parseInt(width1 / scale);
                            cvs.width = width1;
                             cvs.height = height1;
                            var ctx = cvs.getContext("2d");
                            ctx.drawImage(img1, 0, 0,width,height,0,0,width1,height1);
                            var src = cvs.toDataURL("image/jpeg",0.7);
                            return src;
                    }
                    var img1=new Image();
                    img1.src = st1;
                    img1.onload = function() {
                    database = getBase64Image(img1);
                      $(‘#imgUp‘).attr(‘src‘,database);
                          $.ajax({
                            type:"POST",
                            url:"http://www.yuechebang.cn/index.php/OAuth2API/Api/uploadpic",
                            data:{base64:database},
                            dataType:"json",
                            success:function(data){
                                if(data.errcode==1){
                                    alert(data.errmsg);
                                }
                            },error:function(data){
                              alert(‘11‘);
                            }
                          })
                    };
               }
           }
    }else{
         alert( JSON.stringify( err ) );
    }
});
}
</script>
</html>
<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
  <title>图片裁剪</title>
  <!-- 在IOS设备上,有时会将数字转为手机号,这里也要禁止下 -->
  <meta name="format-detection" content="telephone=no"/>
  <link rel="stylesheet" type="text/css" href="css/api.css" />
  <link rel="stylesheet" type="text/css" href="css/aui.css" />
  <style>
      html, body {
        /*background-color: transparent;
        background: rgba(0,0,0,0);*/
      }
      #foot_div {
        display: block;
        bottom: 0px;
        padding-left : 20px;
        padding-right : 20px;
        /*right: 18px;*/
        min-width: 200px;
        line-height: 30px;
        width:100%;
        position: fixed;
        /*border: 1px solid #fff;*/
        text-align: center;
        color: #fff;
        background: #000;
    }
  </style>
  </head>
<body>
  <div id="foot_div">
    <span>
      <font class="aui-pull-left" onclick="back();">取消</font>
      <font onclick="resetImageClip();">重置</font>
      <font onclick="rotateImageClip();">旋转</font>
      <font onclick="saveImageClip();" class="aui-pull-right">选取</font>
    </span>
  </div>
</body>
<script type="text/javascript" src="script/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="script/api.js"></script>
<script type="text/javascript" src="script/base_config.js" ></script>
<script type="text/javascript" src="script/common/common.js" ></script>
<script type="text/javascript">
var FNImageClip;
apiready = function() {
  var img_src = api.pageParam.img_src;
  FNImageClip = api.require(‘FNImageClip‘);
  openImageClip(img_src);
  // alert(img_src);
  //安卓关闭
  if (api.systemType == ‘android‘) {
    backForAndroid();
  }
};
  // 对头像进行裁剪
function openImageClip(img_src){
  var rect_w = api.winWidth;
  var rect_h = api.winHeight;
  var clip_w = parseInt(rect_w - 2);
  var clip_y = parseInt((rect_h - clip_w - 30) / 2);
  FNImageClip.open({
    rect: {
        x: 0,
        y: 0,
        w: rect_w,
        h: rect_h - 30
    },
    srcPath: img_src,
    style: {
          //(可选项)字符串类型;图片裁剪控件遮罩层背景,支持 rgb,rgba,#;默认:#888
      mask: ‘#000‘,
      clip: {
        //(可选项)数字类型;裁剪区域的宽度,当 appearance 为 circular 时,w 为半径;默认:rect.w / 2
        w: clip_w,
        //(可选项)数字类型;裁剪区域的高度,当 appearance 为 circular 时,h 无效;默认:w
        h: clip_w,
        x: 0,
        y: clip_y,
        borderColor: ‘#0f0‘,
        borderWidth: 0,
        //(可选项)字符串类型;裁剪区域的形状,支持 circular | rectangle;默认:rectangle
        appearance: ‘rectangle‘
      }
    },
    mode : ‘image‘,
    fixedOn: api.frameName
  }, function(ret, err){
  });
}

  //  安卓点击返回的时候
function backForAndroid() {
  api.addEventListener({
    name : "keyback"
  }, function(ret, err) {
    back();
  });
}
      //  返回应用页面
function back() {
  closeImageClip();
  api.closeFrame({
    name : ‘main‘
  });
}
// 关闭裁剪组件
function closeImageClip(){
  FNImageClip.close();
}
  //  重置裁剪组件
function resetImageClip(){
  FNImageClip.reset();
}
  // 保存裁剪组件
function saveImageClip(){
  FNImageClip.save({
      destPath: ‘fs://imageClip/result.png‘,
      copyToAlbum: false,
      quality: 1
  },function(ret, err){
    if(ret) {
      api.sendEvent({
        name:‘clip_success‘,
        extra:{
          // element_id:element_id,
          new_img_url:ret.destPath
        }
      })
      FNImageClip.close();
    } else {
      popToast(‘服务器繁忙,请稍后再试‘);
 }
 })
 }
</script>
</html>
时间: 2024-07-30 06:23:44

ipcloud上传裁切图片,保存为base64再压缩传给后台的相关文章

怎么才能将文件流或者图片转化为base64,传到前台展示

图片转化为base64,传到前台展示 public String getBase64(){ String imgStr = ""; try { File file = new File("C:\\EThinkTankFile\\20180402160120431.jpg"); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[(int) file.length()];

ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制

我曾经试过使用JSAjaxFileUploader插件来把文件.照片以异步的方式上传,就像"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"中说的,这种方法足够轻.足够好.但今天,要在前面的基础上再增加2个需求: 1.异步判断上传的图片是否超过最大限制2.把上传的图片裁剪成大中小3张图片,分别保存,删除的时候一块被删除 上传图片如果超出最大尺寸限制,终止上传,并报错误信息. 前台上传图片,显示缩略图. 在项目根目录下的指定文

el-upload怎么拿到上传的图片的base64格式

这里只是本地上传,拿图片的base64,并不向后台直接上传,拿到base64后手动上传 上传前效果: 上传后效果: .vue <el-form-item label="礼品封面"> <el-upload class="avatar-uploader" action="" :show-file-list="false" :auto-upload="false" :on-change=&quo

ssm框架实现图片上传显示并保存地址到数据库

本案例是通过springmvc+spring+mybatis框架以商品上传为例,实现的图片上传功能,并把图片的地址保存到数据库并在前台显示上传的图片. 本项目是使用maven搭建的项目,首先看下项目结构 相关配置自行搜索,下边直接实现上传功能 1.创建数据库 DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `pid` int(11) NOT NULL AUTO_INCREMENT, `pimage` varchar(255) DE

C# 通过ASHX保存上传的图片并制作高质量的缩略图的代码

如下的内容段是关于C# 通过ASHX保存上传的图片并制作高质量的缩略图的内容,应该能对小伙伴也有帮助. <%@ WebHandler Language="C#" Class="UploadFile" Debug="true" %> using System; using System.Web; public class UploadFile : IHttpHandler { public void Proce***equest(Htt

dwz+jquery+fileupload+springmvc实现文件上传 及图片预览

1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarDiskFileItemFactory fac = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(fac);upload.setHeaderEncoding("utf-8"); Html代

KindEditor3.x-自动上传Word图片功能.

Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法处理多张图片.而且转换成BASE64后是作为内容一起提交给服务器,不能够将图片单独保存在另外一台服务器中.如果需要单独保存则需要自已进行处理.比较麻烦. 我希望打开Word或者WPS文档后,复制内容然后直接粘贴到富文本编辑器中,编辑器自动将图片批量上传到服务器中,无论文档中有多少张图片,编辑器都全部

&#8203;Typecho支持上传本地图片的编辑器插件

搭建Typecho博客平台参考我之前的文章:http://msiyuetian.blog.51cto.com/8637744/1920161 Typecho自带的文章编辑器太简洁了,很多功能都缺少,比如本地上传图片等功能.本文主要介绍一款插件:XhEditor1.0.2,支持本地上传图片,也可以直接拖放图片到编辑器中. 1.下载插件,解压得到一个文件夹,并将整个文件夹上传至usr/plugins/目录下 2.登陆自己的Typecho博客后台,在"控制台"的下拉菜单中选择"插件

百度编辑器ueditor给上传的图片添加水印

百度编辑器本身是没有为上传图片添加水印的功能,想要在上传的时候添加图片水印,也很简单.以 ueditor 1.2.6 为例,打开php目录下面的imageUp.php文件,查找"$info = $up->getFileInfo();",在这句代码的下面加入以下代码: /* 添加水印 start */ $water_img = "watermark.png"; //水印文件(替这里换成你要的水印) $img_min_w = 350; //添加水印需要图片最小达到