图片生成64位渲染到当前页面

td style="width:50%;">
									<span style="color:red;">*</span>场景主图(建议对比尺寸4:3):
									<input type="hidden" name="hsceneImg" id="hsceneImg" value="str">
									<input type="hidden" name="hsceneImgNm" id="hsceneImgNm" value="0" >
									<input type="file"  name="sceneImg" id="sceneImg">
								</td>
								<td>									
								<img id="sceneThemeImg" width="100px" height="100px" >

前台

js1:
/**
* 获得base64
* @param {Object} obj
* @param {Number} [obj.width] 图片需要压缩的宽度,高度会跟随调整
* @param {Number} [obj.quality=0.8] 压缩质量,不压缩为1
* @param {Function} [obj.before(this, blob, file)] 处理前函数,this指向的是input:file
* @param {Function} obj.success(obj) 处理后函数
* @example
*
*/
$.fn.compressImage = function(obj) {

var globalObj = this;

this.on('change', function() {
var file = this.files[0];
var URL = window.URL || window.webkitURL;
var blob = URL.createObjectURL(file);

// 执行前函数
if ($.isFunction(obj.before)) {
obj.before(this, blob, file)
};

_create(blob, file);
//this.value = ''; // 清空临时数据
});

/**
* 生成base64
* @param blob 通过file获得的二进制
*/
function _create(blob) {
var img = new Image();
img.src = blob;

img.onload = function() {
var that = this;

//生成比例
var w = that.width,
h = that.height,
scale = w / h;
w = obj.width || w;
h = w / scale;

//生成canvas
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
$(canvas).attr({
width: w,
height: h
});
ctx.drawImage(that, 0, 0, w, h);

/**
* 生成base64
* 兼容修复移动设备需要引入mobileBUGFix.js
*/
var base64 = canvas.toDataURL('image/jpeg', obj.quality || 0.8);

// 修复IOS
if (navigator.userAgent.match(/iphone/i)) {
var mpImg = new MegaPixImage(img);
mpImg.render(canvas, {
maxWidth: w,
maxHeight: h,
quality: obj.quality || 0.8
});
base64 = canvas.toDataURL('image/jpeg', obj.quality || 0.8);
}

// 修复android
if (navigator.userAgent.match(/Android/i)) {
var encoder = new JPEGEncoder();
base64 = encoder.encode(ctx.getImageData(0, 0, w, h), obj.quality * 100 || 80);
}

// 生成结果
var result = {
base64: base64,
clearBase64: base64.substr(base64.indexOf(',') + 1),
obj:globalObj
};

// 执行后函数
obj.success(result);
};
}
};


// 例子
/*
$('input:file').compressImage({
width: 100,
quality: 0.1,
//before: function (that, blob) {},
success: function (result) {
console.log(result);

//页面生成base64编码的图片
var img = new Image();
img.src = result.base64;
$('body').append(img);

//获取图片base64编码
var base64Text = result.clearBase64;


}
});
*/

js2:
//图片处理
jQuery.fn.extend({
uploadPreview: function (opts) {
var _self = this,
_this = $(this);
opts = jQuery.extend({
Img: "ImgPr",
Width: 100,
Height: 100,
ImgType: ["gif", "jpeg", "jpg", "bmp", "png"],
Callback: function () {}
}, opts || {});
_self.getObjectURL = function (file) {
var url = null;
if (window.createObjectURL != undefined) {
url = window.createObjectURL(file)
} else if (window.URL != undefined) {
url = window.URL.createObjectURL(file)
} else if (window.webkitURL != undefined) {
url = window.webkitURL.createObjectURL(file)
}
return url
};
_this.change(function () {
if (this.value) {
if (!RegExp("\.(" + opts.ImgType.join("|") + ")$", "i").test(this.value.toLowerCase())) {
wechatAlert({
mask:true,
content:"选择文件错误,图片类型必须是" + opts.ImgType.join(',') + "中的一种!"
});
this.value = "";
return false
}

var maxsize = 10*1024*1024; //10M
if (this.files[0].size > maxsize) {
wechatAlert({
mask:true,
content:"上传的图片文件不能超过10M!"
});
this.value = "";
return false
}

if ($.browser.msie) {
try {
$("#" + opts.Img).attr('src', _self.getObjectURL(this.files[0]))
} catch (e) {
var src = "";
var obj = $("#" + opts.Img);
var div = obj.parent("div")[0];
_self.select();
if (top != self) {
window.parent.document.body.focus()
} else {
_self.blur()
}
src = document.selection.createRange().text;
document.selection.empty();
obj.hide();
obj.parent("div").css({
'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)',
'width': opts.Width + 'px',
'height': opts.Height + 'px'
});
div.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src
}
} else {
$("#" + opts.Img).attr('src', _self.getObjectURL(this.files[0]))
}
opts.Callback()
}
})
}
});

//商圈范围选择
$(document).ready(function(){
//渲染图片
$("#sceneImg").compressImage({
quality: 1,
success: function (result) {
$("#hsceneImg").val(result.clearBase64);
$("#hsceneImgNm").val(1);//修改标识
}
});
//多个js加入的图片渲染
$("#posterImg").uploadPreview({ Img: "sposterImg", Width: 100, Height: 100 });
var demandListSize = i; //需求
for(var n=0;n<demandListSize;n++){
var hNmimage = "#hNmimage"+(n+1);
var himage = "#himage"+(n+1);
var images = "#image"+(n+1);
//图片Base64编码
$(images).compressImage({
quality: 1,
success: function (result) {
var hNmimg = "#hNm" + $(result.obj).attr("id");
var hddimg = "#h" + $(result.obj).attr("id");
$(hddimg).val(result.clearBase64);
$(hNmimg).attr('value',1);
}
});
}
});

后台
method1:
	Map<String, Object> rtnval = new HashMap<>();
            try {
                rtnval = getServerImageInfo(hsceneImg);
            } catch (Exception e) {
                log.error("error",e);
                modelMap.put("errorMsg", "获取上传压缩图片失败");
                return "/errorpage/error";
            }
            params.put("hsceneImg",(String)rtnval.get("finalPath")+(String)rtnval.get("finalName"));

method2:

 //获取fastdfs服务器上图片信息
    private Map<String, Object> getServerImageInfo(String base64Image) throws Exception{

        Map<String, Object> rtnval = new HashMap<String, Object>();
        try {
            //Base64解码工具类
            BASE64Decoder decoder = new BASE64Decoder();

            // Base64解码
            byte[] buf = decoder.decodeBuffer(base64Image);

            //文件名:IMG_时间戳
            String imageName = "IMAGE_" + String.valueOf(Calendar.getInstance().getTime().getTime()) + ".png";

            //获取图片输入流
            InputStream imageIS = new ByteArrayInputStream(buf);

            //获取图片大小
            long imageSize = imageIS.available();

            //获得文件所在服务器相对路径
            String img_url = FastdfsUtil.getInstance(PropertiesUtil.getValue("fastdfsServerAddress")).uploadFile(imageIS, imageName, imageSize);

            //关闭文件流
            imageIS.close();

            //最后一个斜杠"/"的索引
            int pos = img_url.lastIndexOf("/")+1;

            String img_url_path = img_url.substring(0, pos);
            String img_url_name = img_url.substring(pos, img_url.length());

            rtnval.put("finalPath", img_url_path);
            rtnval.put("finalName", img_url_name);
            rtnval.put("imgName", imageName);

        } catch (Exception e) {
            log.info(e.getMessage());
            throw e;
        }

        return rtnval;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值