primeface+jsf 截取图片

1、引入相应的js和相应的css

jquery.Jcrop.js和jquery.Jcrop.css

2、处理逻辑
    
1) 将本地图片上传至图片服务器

     2)读取图片服务器上图片

     3)截取服务器上图片

     4 )保存截取图片

     5)将服务器上图片再次上传到图片服务器

      6)删除原来未处理的图片

3、需要自己手动设置的js

$(function() {
				$('#cropbox').Jcrop({
					setSelect : [ 0, 0, 150, 100 ],//默认选中区域
					aspectRatio : 100 / 100,//宽度和高度比
					minSize : [ 100, 100 ],//最小值
					maxSize : [ 200, 200 ],//最大值
					bgOpacity : 0.9,//透明度
					onSelect : updateCoords//选择时调用方法
				});

			});

			function updateCoords(c) {
				$('#x').val(c.x);
				$('#y').val(c.y);
				$('#w').val(c.w);
				$('#h').val(c.h);
			};
		</script>

4、页面实现

					<p:fileUpload multiple="true" cancelLabel="取消" uploadLabel="上传"
						label="选择" update="formCat" auto="true" 
						fileUploadListener="#{uploadBean.saveMediaData}" />
				</div>
				<img src="#{uploadBean.md.url}" id="cropbox" style="" />
				<input type="hidden" size="4" id="x" name="x" />
				<input type="hidden" size="4" id="y" name="y" />
				<input type="hidden" size="4" id="w" name="w" />
				<input type="hidden" size="4" id="h" name="h" />
				<p:commandButton value="保存" action="#{uploadBean.crop}"
					styleClass="btn btn-warning" />

45代码实现

		String x = RequestUtil.getRequestParam("x");
		String y = RequestUtil.getRequestParam("y");
		String w = RequestUtil.getRequestParam("w");
		String h = RequestUtil.getRequestParam("h");

		String type = StringKit.substringFileType(mediaUrl);//图片类型
		String fileName = "/" + System.currentTimeMillis()
				+ StringKit.substringPash(mediaUrl);//目标图片路径,截取后图片的据另
		ImageKit.abscut(mediaUrl, fileName, Integer.parseInt(x),
				Integer.parseInt(y), Integer.parseInt(w), Integer.parseInt(h),
				type);//截取图片

5.截取图片方法

	/**
	 * 图像切割(改) *
	 * 
	 * @param srcImageFile
	 *            源图像地址
	 * @param dirImageFile
	 *            新图像地址
	 * @param x
	 *            目标切片起点x坐标
	 * @param y
	 *            目标切片起点y坐标
	 * @param destWidth
	 *            目标切片宽度
	 * @param destHeight
	 *            目标切片高度
	 */
	public static void abscut(String srcImageFile, String dirImageFile, int x,
			int y, int destWidth, int destHeight, String fileType) {
		try {
			Image img;
			ImageFilter cropFilter;
			// 读取源图像
			BufferedImage bi = ImageIO.read(new File(srcImageFile));
			int srcWidth = bi.getWidth(); // 源图宽度
			int srcHeight = bi.getHeight(); // 源图高度
			if (srcWidth >= destWidth && srcHeight >= destHeight) {
				Image image = bi.getScaledInstance(srcWidth, srcHeight,
						Image.SCALE_DEFAULT);
				// 改进的想法:是否可用多线程加快切割速度
				// 四个参数分别为图像起点坐标和宽高
				// 即: CropImageFilter(int x,int y,int width,int height)
				cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
				img = Toolkit.getDefaultToolkit().createImage(
						new FilteredImageSource(image.getSource(), cropFilter));
				BufferedImage tag = new BufferedImage(destWidth, destHeight,
						BufferedImage.TYPE_INT_RGB);
				Graphics g = tag.getGraphics();
				g.drawImage(img, 0, 0, null); // 绘制缩小后的图
				g.dispose();
				// 输出为文件
				ImageIO.write(tag, fileType, new File(dirImageFile));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值