如何实现从照片中裁切自已的肖像呢?

在会员注册时,让会员输入头像对后续的功能很重要。很难指望普通人具备photoshop的操作能力,让他们提供合乎尺寸的个人照片不太现实。还好现在可以让服务端支持图片处理,我们只需要在客户端提供用户设计图片的接口就可以了。

下面的程序实现了裁切缩放部分图片的功能。从技术上来看,主要是怎么让半透明的摭罩中空,为了实现这一点,我使用了3*3的表格来模拟座标上的矩形,通过指定左上单元格的宽高来设置矩形的座标,而中心单元格的宽高则与矩形的尺寸相对应。

#tbHole td{background:white;filter:alpha(opacity=50);-moz-opacity:.5}
#tbHole img{width:1;height:1;visibility:hidden}
v\:*{behavior:url(#default#vml)}




function $(obj){
return typeof(obj)=="object"?"obj":document.getElementById(obj)
}
bxHole_ini()
function bxHole_ini(){
var bx=$("bxHole"),tb=$("tbHole")
$("bxImgHoleShow").innerHTML=""
bx.w0=tb.rows[0].cells[1].offsetWidth
bx.h0=tb.rows[1].offsetHeight
bx.w_img=$("imgHoleShow").offsetWidth
bx.h_img=$("imgHoleShow").offsetHeight
bx.dragStart=function(e,dragType){
bx.dragType=dragType
bx.px=tb.rows[0].cells[0].offsetWidth
bx.py=tb.rows[0].offsetHeight
bx.pw=tb.rows[0].cells[1].offsetWidth
bx.ph=tb.rows[1].offsetHeight
bx.sx=e.screenX
bx.sy=e.screenY
}
bx.onmouseup=function(){
if(bx.dragType==null)
return
var w=tb.rows[0].cells[1].offsetWidth,h=tb.rows[1].offsetHeight
bx.dragType=null
if(w/h>bx.w0/bx.h0)
tb.rows[0].cells[1].style.width=h*bx.w0/bx.h0
else
tb.rows[1].style.height=w*bx.h0/bx.w0
bx.setTip()
}
bx.onmousemove=function(e){
var x,y,w,h
if(bx.dragType==null)
return
if(e==null)
e=event
x=Math.max(bx.px+e.screenX-bx.sx,1)
y=Math.max(bx.py+e.screenY-bx.sy,1)
w=Math.min(bx.pw+e.screenX-bx.sx,tb.offsetWidth-bx.px-1)
h=Math.min(bx.ph+e.screenY-bx.sy,tb.offsetHeight-bx.py-1)
if(bx.dragType==0){
x=Math.min(x,tb.offsetWidth-bx.pw-1)
y=Math.min(y,tb.offsetHeight-bx.ph-1)
w=bx.pw
h=bx.ph
}
if(bx.dragType==1||bx.dragType==4)
w=bx.pw+bx.px-x
if(bx.dragType==1||bx.dragType==2)
h=bx.ph+bx.py-y
if(bx.dragType==2||bx.dragType==3)
x=bx.px
if(bx.dragType==3||bx.dragType==4)
y=bx.py
w=Math.max(w,bx.w0/2)
h=Math.max(h,bx.h0/2)
if(bx.dragType==1||bx.dragType==4)
x=bx.pw+bx.px-w
if(bx.dragType==1||bx.dragType==2)
y=bx.ph+bx.py-h
tb.rows[0].cells[0].style.width=x
tb.rows[0].cells[1].style.width=w
tb.rows[0].style.height=y
tb.rows[1].style.height=h
$("bxHole").setTip()
}
bx.setTip=function(){
var x=tb.rows[0].cells[0].offsetWidth,y=tb.rows[0].offsetHeight,w=tb.rows[0].cells[1].offsetWidth,h=tb.rows[1].offsetHeight
var img=$("imgHoleShow"),per
$("bxHoleMove1").style.left=$("bxHoleMove4").style.left=x-3
$("bxHoleMove1").style.top=$("bxHoleMove2").style.top=y-3
$("bxHoleMove2").style.left=$("bxHoleMove3").style.left=x+w-4
$("bxHoleMove3").style.top=$("bxHoleMove4").style.top=y+h-4

if(w/h>bx.w0/bx.h0)
w=h*bx.w0/bx.h0
else
h=w*bx.h0/bx.w0
per=bx.h0/h
img.style.width=per*bx.w_img
img.style.height=per*bx.h_img
img.style.left=-x*per
img.style.top=-y*per
}
bx.setTip()
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • 如何实现从照片中裁切自已的肖像呢?

    在会员注册时,让会员输入头像对后续的功能很重要.很难指望普通人具备photoshop的操作能力,让他们提供合乎尺寸的个人照片不太现实.还好现在可以让服务端支持图片处理,我们只需要在客户端提供用户设计图片的接口就可以了. 下面的程序实现了裁切缩放部分图片的功能.从技术上来看,主要是怎么让半透明的摭罩中空,为了实现这一点,我使用了3*3的表格来模拟座标上的矩形,通过指定左上单元格的宽高来设置矩形的座标,而中心单元格的宽高则与矩形的尺寸相对应. #tbHole td{background:white;

  • Python识别处理照片中的条形码

    最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要0.5s. 整体思路大概就是识别出图中数字生成list,然后求解. 输入输出demo 数独采用的是微软自带的Microsoft sudoku软件随便截取的图像,如下图所示: 经过程序求解后,得到的结果如下图所示: def getFollow(varset, terminalset, first_dic, production_list):     follow_dic = {}     done = {}     for var

  • Python实现检测照片中的人脸数

    目录 1.准备 2.代码 3.效果 最近疫情被隔离在家,准备研究一下python的机器学习,看了一些资料.也逛了逛论坛. 机器学习的实例真是太多了,让人眼花缭乱,更加懵逼了.通俗来说,主要两个方面,比较浅层次的就是机器学习,最后才是深度学习. 主要过程就是通过一定的算法来训练大量的数据产生一个数据模型,最后再利用这个模型来分析或计算出出最接近于实际情况的结果. 大概理解了意思之后,我就不再去深究了,直接搞个实例来试试看什么效果.至于更深层级的东西,我比较喜欢在实战中慢慢体会. 1.准备 今天实践

  • Android实现从相册选择照片功能

    本文实例为大家分享了Android实现从相册选择照片功能的具体代码,供大家参考,具体内容如下 之前在 <Android开发之裁剪照片>一文中介绍过,如何从相册选取照片和拍摄照片并进行裁切,在本篇中主要向介绍从相册选择原生照片(不裁切). 第一步:向系统发送选择照片的意图. /**  * 从相册选择原生的照片(不裁切)  */ private void selectFromGallery() {     // TODO Auto-generatedmethod stub     Intentin

  • C#实现手机拍照并且保存水印照片

    图像采集需要调用摄像头就行拍照操作,网上查了一下资料,需要引用以下3个dll. 看一下运行界面 界面都比较low,主要是功能实现. private void Camera_Load(object sender, EventArgs e) { this.btnSave.Enabled = false; try { borderSize = GetBorderSize(this); captionHeight = GetCaptionHeight(this); //InitStudent("&quo

  • html页面中图像格式的选用之我见第1/2页

    下面我们先了解一下几种格式的比较正式的解释(注:以下内容源自百度知道): GIF 意为Graphics Interchange format(图形交换格式),GIF图片的扩展名是gif.现在所有的图形浏览器都支持GIF格式,而且有的图形浏览器只认识GIF格式.GIF是一种索引颜色格式,在颜色数很少的情况下,产生的文件极小,它的优点主要有: GIF格式支持背景透明.GIF图片如果背景色设置为透明,它将与浏览器背景相结合,生成非矩形的图片.  GIF格式支持动画.在Flash动画出现之前,GIF动画

  • Python如何根据照片修改时间重命名并排序详解

    一.Background 当想将照片序列合成延时摄影视频时,可能会发现照片中缺少一张,或者照片序列是跨时间.并不连续的,如图1所示,但PR中只有连续的照片序列才能导入. 图1  时间不连续序列 二.Method 这时往往需要将照片按照修改时间重命名,下面写了一个很简单的python脚本,理论上来说支持10000张照片以内的照片序列重命名,操作如下: 1.将照片备份(没有undo机制,以免脚本失误无法撤销) 2.将rename.exe文件放入照片文件中,双击即可重命名(不可更改名字).如果安装过p

  • Python Barbershop实现照片换发型功能

    目录 前言 环境部署 1.导入environment/environment.yaml环境 2.安装pytorch 3.依赖库安装 4. cl.exe环境变量配置 5.模型下载 6.发型数据下载 7.代码调整 项目验证 1.预处理照片 2.换发型 总结 前言 最近看到一个开源项目(Barbershop),可以将照片中的发型更换成另一个,很神奇.先给大家看看项目给出的效果图. 先说说我在安装使用该项目的感受,因为作者给的安装说明太少,我边看代码边安装环境花了整整8个小时,顺便还在等安装的过程中,追

  • Python使用Keras OCR实现从图像中删除文本

    目录 介绍 处理 实现 Keras ocr简介 cv2修复函数 汇总 结尾 介绍 本文将讨论如何快速地从图像中删除文本,作为图像分类器的预处理步骤. 删除文本可能有多种或多种原因,例如,我们可以使用无文本图像进行数据增强. 在本教程中,我们将使用OCR(光学字符识别)检测图像中的文本,并在修复过程中填充照片中丢失的部分以生成完整的图像——以删除我们检测到的文本. 处理 为了从图像中删除文本,我们将执行以下三个步骤: 1.识别图像中的文本,并使用KerasOCR获取每个文本的边界框坐标. 2.对于

  • 浅谈MySQL中是如何实现事务提交和回滚的

    目录 什么是事务 redo log undo log 总结一下 什么是事务 事务是由数据库中一系列的访问和更新组成的逻辑执行单元 事务的逻辑单元中可以是一条SQL语句,也可以是一段SQL逻辑,这段逻辑要么全部执行成功,要么全部执行失败 举个最常见的例子,你早上出去买早餐,支付宝扫码付款给早餐老板,这就是一个简单的转账过程,会包含两步 从你的支付宝账户扣款10元 早餐老板的账户增加10元 这两步其中任何一部出现问题,都会导致整个账务出现问题 假如你的支付宝账户扣款10元失败,早餐老板的账户增加成功

随机推荐