发明内容
为了解决上述问题,本发明实施例公开了一种图片裁剪方法及装置,具体技术方案如下:
本发明提供的一种图片裁剪方法,该方法用于对发生角度旋转的图片进行裁剪,包括:
接收用户输入的图片裁剪指令;其中,所述图片裁剪指令中携带有裁剪框的位置信息;
根据裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内,如果是,使用所述裁剪框对所述待裁剪的图片进行裁剪;
否则,将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内,使用调整后的裁剪框对所述待裁剪的图片进行裁剪。
根据本发明提供的一种具体实施方式中,所述根据裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内,包括:
以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,计算所述待裁剪图片的四条边的直线方程;
根据裁剪框的位置信息,确定在同一二维直角坐标系下所述裁剪框的四个端点的坐标值;
根据所述直线方程及坐标值,判断所述裁剪框的四个端点是否位于所述直线方程构成的区域内,如果是,则所述裁剪框的覆盖区域完全位于待裁剪图片的图片区域内,否则不完全位于。
根据本发明提供的一种具体实施方式中,所述待裁剪图片的图片区域内的一个点为所述待裁剪图片的端点。
根据本发明提供的一种具体实施方式中,所述计算所述待裁剪图片的四条边的直线方程,包括:
根据所述待裁剪图片的图片长度、宽度及图片的旋转角度,计算所述待裁剪图片的四条边的直线方程;
或
根据所述待裁剪图片的四个端点坐标值,计算所述待裁剪图片的四条边的直线方程。
根据本发明提供的一种具体实施方式中,所述根据所述直线方程及坐标值,判断所述裁剪框的四个端点是否位于所述直线方程构成的区域内,包括:
根据所述直线方程,生成对应于所述待裁剪的图片的四条边的四个函数;
将所述裁剪框的四个端点分别代入所述待裁剪的图片的四条边所对应的四个函数中;
针对每个函数,判断所述裁剪框的四个端点代入该函数的结果是否同号;
如果均同号,进一步针对每组互为对边的边所对应的两个函数,判断所述裁剪框的四个端点代入该两个函数的结果是否异号,如果均异号,则所述裁剪框的四个端点位于所述直线方程构成的区域内。
根据本发明提供的一种具体实施方式中,在所述将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内之前,还包括:
向用户展示用于提示裁剪框已超出待裁剪图片的图片区域的第一消息提示。
根据本发明提供的一种具体实施方式中,在所述将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内之前,还包括:
向用户展示用于询问是否接受系统自动将覆盖区域调整至图片区域内的第二消息提示;
在接收到用户针对所述第二消息提示做出的肯定操作后,执行所述将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内的步骤。
本发明提供的一种图片裁剪装置,该装置用于对发生角度旋转的图片进行裁剪,包括:
指令接收模块,用于接收用户输入的图片裁剪指令;其中,所述图片裁剪指令中携带有裁剪框的位置信息;
判断模块,根据裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内;
第一裁剪模块,用于在所述判断模块的判断结果为是的情况下,使用所述裁剪框对所述待裁剪的图片进行裁剪;
第二裁剪模块,用于在所述判断模块的判断结果为否的情况下,将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内,使用调整后的裁剪框对所述待裁剪的图片进行裁剪。
根据本发明提供的一种具体实施方式中,所述判断模块,包括:
直线方程计算子模块,用于以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,计算所述待裁剪图片的四条边的直线方程;
坐标值确定子模块,用于根据裁剪框的位置信息,确定在同一二维直角坐标系下所述裁剪框的四个端点的坐标值;
判断子模块,用于根据所述直线方程及坐标值,判断所述裁剪框的四个端点是否位于所述直线方程构成的区域内,如果是,则所述裁剪框的覆盖区域完全位于待裁剪图片的图片区域内,否则不完全位于。
根据本发明提供的一种具体实施方式中,所述待裁剪图片的图片区域内的一个点为所述待裁剪图片的端点。
根据本发明提供的一种具体实施方式中,所述直线方程计算子模块,具体用于:
以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,根据所述待裁剪图片的图片长度、宽度及图片的旋转角度,计算所述待裁剪图片的四条边的直线方程;
或
以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,根据所述待裁剪图片的四个端点坐标值,计算所述待裁剪图片的四条边的直线方程。
根据本发明提供的一种具体实施方式中,所述判断子模块,具体用于:
根据所述直线方程,生成对应于所述待裁剪的图片的四条边的四个函数;
将所述裁剪框的四个端点分别代入所述待裁剪的图片的四条边所对应的四个函数中;
针对每个函数,判断所述裁剪框的四个端点代入该函数的结果是否同号;
如果均同号,进一步针对每组互为对边的边所对应的两个函数,判断所述裁剪框的四个端点代入该两个函数的结果是否异号,如果均异号,则所述裁剪框的四个端点位于所述直线方程构成的区域内。
根据本发明提供的一种具体实施方式中,所述装置还包括:
第一消息提示展示模块,用于向用户展示用于提示裁剪框已超出待裁剪图片的图片区域的第一消息提示。
根据本发明提供的一种具体实施方式中,所述装置还包括:
第二消息提示展示模块,用于向用户展示用于询问是否接受系统自动将覆盖区域调整至图片区域内的第二消息提示;
触发执行模块,用于在接收到用户针对所述第二消息提示做出的肯定操作后,触发所述第二裁剪模块执行将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内的操作。
应用上述技术方案,本发明实施例提供的图片裁剪方法及装置,可以在接收到用户输入的图片裁剪指令后,根据所述图片裁剪指令中携带的裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内,如果是,使用所述裁剪框对所述待裁剪的图片进行裁剪;否则,将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内,使用调整后的裁剪框对所述待裁剪的图片进行裁剪。
与现有技术相比,本发明可以针对发生角度旋转的图片,通过比较裁剪框的覆盖区域是否落入待裁剪图片的图片区域内的方式,决定具体采用何种裁剪方式,从而保证在用户对发生角度旋转的图片进行裁剪时,裁剪框不超出待裁剪图片的图片区域。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着图像处理技术的快速发展,图像处理软件开发者提供的图像处理软件的种类越来越多、功能越来越丰富。目前主流的图像处理软件均具有图像裁剪功能。图像处理软件在对图片进行裁剪时,是借助裁剪框实现的,用户可以通过调整裁剪框尺寸、位置等方式来获取期望内容的图像区域。
然而,由于在使用裁剪框对发生角度旋转的图片进行裁剪使时,很难保证裁剪框完全落入待裁剪图片的图片区域,因此亟需提出一种图片裁剪方法来解决上述问题。为了解决上述问题,本发明实施例提供了一种图片裁剪方法及装置。
下面首先对本发明实施例提供的一种图片裁剪方法进行介绍。
需要说明的是,本发明实施例提供的方法适用于电子设备,在实际应用中,该电子设备可以包括:智能手机、平板电脑、笔记本/台式电脑等电子设备。
如图1所示,本发明实施例提供的一种图片裁剪方法,该方法用于对发生角度旋转的图片进行裁剪,可以包括:
S101,接收用户输入的图片裁剪指令;其中,所述图片裁剪指令中携带有裁剪框的位置信息。
本发明可以为用户提供输入图片裁剪指令的接口,在实际应用中,该接口的形式可以包括:裁剪框的尺寸值输入接口、可以接收触屏或操作设备例如鼠标对裁剪框的尺寸或位置进行调整接口。本发明实施例对此不做限定。
S102,根据裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内。
可选的,如图1(a)所示,上述S102,可以包括:
S102a,以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,计算所述待裁剪图片的四条边的直线方程。
优选的,所述待裁剪图片的图片区域内的一个点为所述待裁剪图片的端点例如待裁剪图片的左上端点。
具体的,在本发明的一个具体实施方式中,所述计算所述待裁剪图片的四条边的直线方程,可以包括:
根据所述待裁剪图片的图片长度、宽度及图片的旋转角度,计算所述待裁剪图片的四条边的直线方程。
例如图1(b)所示为未发生角度旋转时的待裁剪图片,图1(c)所示为发生角度旋转时的待裁剪图片,其中A、B、C、D为图片的四个端点,以图1(b)中的A点为原点建立坐标系,X轴向右为正,Y轴向下为正,建立坐标系,针对发生角度旋转的图片,可以获得以下信息:
1.发生角度旋转的图片的宽度W、高度V;
2.图片的旋转角度用字母α表示;
首先,根据条件1可以求得角度旋转前的图片的AB,BC,CD,DA四条边的直线方程分别为x=0,y=0,x=W,y=V;
之后,根据图片旋转角度α可以求得角度旋转后的图片的AB,BC,CD,DA四条边的直线方程。
可以理解,在二维直角坐标系中已知两个点的坐标,可以求得一条经过前述两点的直线方程,在本发明的另一个具体实施方式中,所述计算所述待裁剪图片的四条边的直线方程,可以包括:
根据所述待裁剪图片的四个端点坐标值,计算所述待裁剪图片的四条边的直线方程。
S102b,根据裁剪框的位置信息,确定在同一二维直角坐标系下所述裁剪框的四个端点的坐标值。
如图1(c)所示的裁剪框的四个端点及坐标值:A1点(ax1,ay1),B1点(bx1,by1),C1点(cx1,cy1),和D1点(dx1,dy1)。
S102c,根据所述直线方程及坐标值,判断所述裁剪框的四个端点是否位于所述直线方程构成的区域内,如果是,则所述裁剪框的覆盖区域完全位于待裁剪图片的图片区域内,否则不完全位于。
具体的,上述S102c,可以包括:
根据所述直线方程,生成对应于所述待裁剪的图片的四条边的四个函数;
示例性的,假设AB对应的直线方程为:Ex+Fy+G=0(E,F,G为某一常量),则AB对应的函数为f(x,y)=Ex+Fy+G,同理可以求得其他三个边对应的函数。
将所述裁剪框的四个端点分别代入所述待裁剪的图片的四条边所对应的四个函数中;
针对每个函数,判断所述裁剪框的四个端点代入该函数的结果是否同号;
如果均同号,进一步针对每组互为对边的边所对应的两个函数,判断所述裁剪框的四个端点代入该两个函数的结果是否异号,如果均异号,则所述裁剪框的四个端点位于所述直线方程构成的区域内。
示例性的接上实例,把上述裁剪框四个端点的坐标值A1点(ax1,ay1),B1点(bx1,by1),C1点(cx1,cy1),和D1点(dx1,dy1)带入AB对应的函数中,得:
E*ax1+F*ay1+G<=0并且E*bx1+F*by1+G<=0并且E*cx1+F*cy1+G<=0并且E*dx1+F*dy1+G<=0同时成立————条件1
E*ax1+F*ay1+G>=0并且E*bx1+F*by1+G>=0并且E*cx1+F*cy1+G>=0并且E*dx1+F*dy1+G>=0同时成立————条件2
注意:条件1成立代表裁剪框的四个端点A1、B1、C1和D1在直线AB的同侧,条件2成立代表裁剪框的四个端点A1、B1、C1和D1在直线AB的同侧。
假设CD对应的直线方程为:Hx+Jy+K=0(H,J,K为某一常量),则CD对应的函数为f(x,y)=Hx+Jy+K;把上述裁剪框四个端点的坐标值A1点(ax1,ay1),B1点(bx1,by1),C1点(cx1,cy1),和D1点(dx1,dy1)带入CD对应的函数中,得:
H*ax1+J*ay1+K>=0并且H*bx1+J*by1+K>=0并且H*cx1+J*cy1+K>=0并且H*dx1+J*dy1+K>=0同时成立————条件3
H*ax1+J*ay1+K<=0并且H*bx1+J*by1+K<=0并且H*cx1+J*cy1+K<=0并且H*dx1+J*dy1+K<=0同时成立————条件4
注意:条件3成立代表裁剪框的四个端点A1、B1、C1和D1在直线CD的同侧,条件4成立代表裁剪框的四个端点A1、B1、C1和D1在直线CD的同侧。
确保裁剪框的四个端点A1、B1、C1和D1位于图片区域内的边缘检测的条件是:条件1和条件3需要同时成立,或者条件2和条件4同时成立(这里保证的是剪裁框在AB和CD之间)。同理可以得到BC和DA这组对边需要满足得的缘检测条件。
S103,使用所述裁剪框对所述待裁剪的图片进行裁剪。
S104,将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内,使用调整后的裁剪框对所述待裁剪的图片进行裁剪。
在本发明步骤中的对裁剪框的覆盖区域的调整,可以包括:对裁剪框的覆盖区域的位置的调整,或者对裁剪框的覆盖区域的尺寸大小的调整。
由此可见,本发明实施例提供的图片裁剪方法,可以在接收到用户输入的图片裁剪指令后,根据所述图片裁剪指令中携带的裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内,如果是,使用所述裁剪框对所述待裁剪的图片进行裁剪;否则,将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内,使用调整后的裁剪框对所述待裁剪的图片进行裁剪。
与现有技术相比,本发明可以针对发生角度旋转的图片,通过比较裁剪框的覆盖区域是否落入待裁剪图片的图片区域内的方式,决定具体采用何种裁剪方式,从而保证在用户对发生角度旋转的图片进行裁剪时,裁剪框不超出待裁剪图片的图片区域。
可选的,在本发明的另一个实施例中,本发明实施例提供的图片裁剪方法,在判断出所述裁剪框的覆盖区域不完全位于待裁剪图片的图片区域内的情况下,还可以在将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内之前,包括以下步骤:
向用户展示用于提示裁剪框已超出待裁剪图片的图片区域的第一消息提示。
可选的,在本发明的另一个实施例中,本发明实施例提供的图片裁剪方法,在判断出所述裁剪框的覆盖区域不完全位于待裁剪图片的图片区域内的情况下,还可以在将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内之前,包括以下步骤:
向用户展示用于询问是否接受系统自动将覆盖区域调整至图片区域内的第二消息提示;
在接收到用户针对所述第二消息提示做出的肯定操作后,执行所述将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内的步骤。
本实施例步骤,可以在征得用户同意后对裁剪框的覆盖区域进行调整,以使裁剪出来的图像充满裁剪框且带有旋转角度。
相应于上面介绍的方法实施例,本发明实施例还提供了一种图片裁剪装置。
如图2所示,本发明实施例提供的一种图片裁剪装置,该装置用于对发生角度旋转的图片进行裁剪,可以包括:
指令接收模块201,用于接收用户输入的图片裁剪指令;其中,所述图片裁剪指令中携带有裁剪框的位置信息;
判断模块202,根据裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内;
第一裁剪模块203,用于在所述判断模块202的判断结果为是的情况下,使用所述裁剪框对所述待裁剪的图片进行裁剪;
第二裁剪模块204,用于在所述判断模块202的判断结果为否的情况下,将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内,使用调整后的裁剪框对所述待裁剪的图片进行裁剪。
由此可见,本发明实施例提供的图片裁剪装置,可以在接收到用户输入的图片裁剪指令后,根据所述图片裁剪指令中携带的裁剪框的位置信息,判断所述裁剪框的覆盖区域是否完全位于待裁剪图片的图片区域内,如果是,使用所述裁剪框对所述待裁剪的图片进行裁剪;否则,将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内,使用调整后的裁剪框对所述待裁剪的图片进行裁剪。
与现有技术相比,本发明可以针对发生角度旋转的图片,通过比较裁剪框的覆盖区域是否落入待裁剪图片的图片区域内的方式,决定具体采用何种裁剪方式,从而保证在用户对发生角度旋转的图片进行裁剪时,裁剪框不超出待裁剪图片的图片区域。
可选的,在本发明的一个实施例中,所述判断模块202,可以包括:
直线方程计算子模块,用于以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,计算所述待裁剪图片的四条边的直线方程;
坐标值确定子模块,用于根据裁剪框的位置信息,确定在同一二维直角坐标系下所述裁剪框的四个端点的坐标值;
判断子模块,用于根据所述直线方程及坐标值,判断所述裁剪框的四个端点是否位于所述直线方程构成的区域内,如果是,则所述裁剪框的覆盖区域完全位于待裁剪图片的图片区域内,否则不完全位于。
可选的,在本发明的一个实施例中,所述待裁剪图片的图片区域内的一个点可以为所述待裁剪图片的端点。
可选的,在本发明的一个实施例中,所述直线方程计算子模块,具体可以用于:
以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,根据所述待裁剪图片的图片长度、宽度及图片的旋转角度,计算所述待裁剪图片的四条边的直线方程;
或
以所述待裁剪图片的图片区域内的一个点为原点建立二维直角坐标系,根据所述待裁剪图片的四个端点坐标值,计算所述待裁剪图片的四条边的直线方程。
可选的,在本发明的一个实施例中,所述判断子模块202,具体可以用于:
根据所述直线方程,生成对应于所述待裁剪的图片的四条边的四个函数;
将所述裁剪框的四个端点分别代入所述待裁剪的图片的四条边所对应的四个函数中;
针对每个函数,判断所述裁剪框的四个端点代入该函数的结果是否同号;
如果均同号,进一步针对每组互为对边的边所对应的两个函数,判断所述裁剪框的四个端点代入该两个函数的结果是否异号,如果均异号,则所述裁剪框的四个端点位于所述直线方程构成的区域内。
可选的,在本发明的一个实施例中,所述装置还可以包括:
第一消息提示展示模块,用于向用户展示用于提示裁剪框已超出待裁剪图片的图片区域的第一消息提示。
可选的,在本发明的一个实施例中,所述装置还可以包括:
第二消息提示展示模块,用于向用户展示用于询问是否接受系统自动将覆盖区域调整至图片区域内的第二消息提示;
触发执行模块,用于在接收到用户针对所述第二消息提示做出的肯定操作后,触发所述第二裁剪模块执行将所述裁剪框的覆盖区域调整至所述待裁剪的图片区域内的操作。
对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本发明时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。