发明内容
本发明实施例提供了基于iOS的图片裁剪与还原方法、装置及其相关介质,旨在解决现有技术中基于iOS的图片裁剪无法随时还原裁剪图片的问题。
第一方面,本发明实施例提供了一种基于iOS的图片裁剪与还原方法,包括:
分别创建预览图层和蒙版图层,并将所述蒙版图层设置为所述预览图层的蒙版;其中,所述预览图层的原始填充图像为原始图片,所述蒙版图层的原始填充图像为纯色图片;
分别创建图像渲染器和手势监听器,并将所述手势监听器赋予所述预览图层;其中,所述图像渲染器用于生成自定义图像,所述手势监听器用于监听用户的交互手势;
利用所述手势监听器获取用户在所述预览图层的交互信息;
利用所述图像渲染器开启对应所述蒙版图层的绘制区域,并在所述绘制区域上绘制所述蒙版图层的目标填充图像;
根据所述交互信息创建滑动路径,并利用所述滑动路径对在所述绘制区域上绘制的所述蒙版图层的目标填充图像进行裁剪或者还原,得到绘制图像;
利用所述图像渲染器关闭所述绘制区域,并对所述绘制图像进行图像渲染得到渲染图像;
将所述渲染图像设置为所述蒙版图层的最终填充图像,并利用所述预览图层对所述蒙版图层的最终填充图像进行透明度映射,得到对应所述预览图层的映射结果;
利用所述图像渲染器将所述原始图片的颜色值与所述映射结果进行结合绘制,得到最终的裁剪或者还原图片。
第二方面,本发明实施例提供了一种基于iOS的图片裁剪与还原装置,包括:
图层创建单元,用于分别创建预览图层和蒙版图层,并将所述蒙版图层设置为所述预览图层的蒙版;其中,所述预览图层的原始填充图像为原始图片,所述蒙版图层的原始填充图像为纯色图片;
图层赋予单元,用于分别创建图像渲染器和手势监听器,并将所述手势监听器赋予所述预览图层;其中,所述图像渲染器用于生成自定义图像,所述手势监听器用于监听用户的交互手势;
信息获取单元,用于利用所述手势监听器获取用户在所述预览图层的交互信息;
图层绘制单元,用于利用所述图像渲染器开启对应所述蒙版图层的绘制区域,并在所述绘制区域上绘制所述蒙版图层的目标填充图像;
路径绘制单元,用于根据所述交互信息创建滑动路径,并利用所述滑动路径对在所述绘制区域上绘制的所述蒙版图层的目标填充图像进行裁剪或者还原,得到绘制图像;
图像渲染单元,用于利用所述图像渲染器关闭所述绘制区域,并对所述绘制图像进行图像渲染得到渲染图像;
图层映射单元,用于将所述渲染图像设置为所述蒙版图层的最终填充图像,并利用所述预览图层对所述蒙版图层的最终填充图像进行透明度映射,得到对应所述预览图层的映射结果;
图片输出单元,用于利用所述图像渲染器将所述原始图片的颜色值与所述映射结果进行结合绘制,得到最终的裁剪或者还原图片。
第三方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述第一方面的基于iOS的图片裁剪与还原方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其中,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述第一方面的基于iOS的图片裁剪与还原方法。
本发明实施例提供一种基于iOS的图片裁剪与还原方法,包括分别创建预览图层和蒙版图层,并将蒙版图层设置为预览图层的蒙版;分别创建图像渲染器和手势监听器,并将手势监听器赋予预览图层;利用手势监听器获取用户的交互信息;利用图像渲染器绘制蒙版图层的目标填充图像;根据交互信息创建滑动路径,并对目标填充图像进行裁剪或者还原,得到绘制图像;对绘制图像进行图像渲染得到渲染图像;将渲染图像设置为蒙版图层的最终填充图像,并进行透明度映射得到映射结果;利用图像渲染器将原始图片的颜色值与映射结果进行结合绘制,得到最终的裁剪或者还原图片。本发明通过对目标填充图像的裁剪或者还原,并结合原始图片进行绘制,实现了自由裁剪或者还原图片,大大提高了图片的处理效率。
本发明实施例还提供一种基于iOS的图片裁剪与还原装置、计算机设备和存储介质,同样具有上述有益效果。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和 “包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/ 或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
下面请参见图1,图1为本发明实施例提供的一种基于iOS的图片裁剪与还原方法的流程示意图,具体包括:步骤S101~S108。
S101、分别创建预览图层和蒙版图层,并将所述蒙版图层设置为所述预览图层的蒙版;其中,所述预览图层的原始填充图像为原始图片,所述蒙版图层的原始填充图像为纯色图片;
S102、分别创建图像渲染器和手势监听器,并将所述手势监听器赋予所述预览图层;其中,所述图像渲染器用于生成自定义图像,所述手势监听器用于监听用户的交互手势;
S103、利用所述手势监听器获取用户在所述预览图层的交互信息;
S104、利用所述图像渲染器开启对应所述蒙版图层的绘制区域,并在所述绘制区域上绘制所述蒙版图层的目标填充图像;
S105、根据所述交互信息创建滑动路径,并利用所述滑动路径对在所述绘制区域上绘制的所述蒙版图层的目标填充图像进行裁剪或者还原,得到绘制图像;
S106、利用所述图像渲染器关闭所述绘制区域,并对所述绘制图像进行图像渲染得到渲染图像;
S107、将所述渲染图像设置为所述蒙版图层的最终填充图像,并利用所述预览图层对所述蒙版图层的最终填充图像进行透明度映射,得到对应所述预览图层的映射结果;
S108、利用所述图像渲染器将所述原始图片的颜色值与所述映射结果进行结合绘制,得到最终的裁剪或者还原图片。
结合图2所示,在步骤S101中,首先创建了两个关键图层:预览图层(previewLayer,下同)和蒙版图层(maskLayer,下同)。预览图层负责显示原始图片,而蒙版图层则被设置为预览图层的蒙版,用于控制预览图层的可见部分。蒙版图层的填充图像被设置为一张纯色图片,这里使用纯色图片的好处在于,它的颜色信息不重要,只需利用其像素点的透明度信息。这种方式在性能上更高效,因为只需要处理透明度信息,无需关心颜色。用户可以通过手势操作来改变蒙版图层的形状,实时预览裁剪效果,提供了良好的交互体验。
在一实施例中,所述步骤S101,包括:
创建一个CALayer对象,并赋值给所述蒙版图层;
将所述蒙版图层的contents属性设置为引用一张图片的颜色属性;
将所述蒙版图层设置为所述预览图层的蒙版。
在本实施例中,通过let maskLayer = CALayer()指令创建了一个CALayer对象。CALayer是Core Animation框架中用于绘制和显示图形内容的基本类。通过maskLayer.contents属性(即蒙版图层的contents属性),将其设置为引用一张图片的颜色属性,这意味着蒙版图层的形状将根据图片的颜色信息进行定义,为裁剪提供了更多的选择。通过previewView.layer.mask = maskLayer指令,将蒙版图层应用于预览图层,如此,预览图层中只有蒙版图层形状内的区域才是可见的,其他区域将被遮挡或裁剪。
进一步的,还可以包括使用计算机视觉算法,例如图像分割技术,使得用户能够智能选择裁剪区域,或者应用实时滤镜效果,增加更多的图像处理功能。使用具有颜色信息的图像作为蒙版,可以提供更多创意和设计空间,使得图片裁剪过程更加灵活和富有趣味性。
在步骤S102中,创建图像渲染器对象(renderer,下同),例如:使用指令letrenderer = UIGraphicsImageRenderer(size: previewView.bounds.size),即创建的UIGraphicsImageRenderer对象被配置为在指定大小(previewView.bounds.size)上进行绘制。图像渲染器提供了一个绘制环境,可以用于生成自定义图像。图像渲染器可以指定绘制区域的大小,使得用户可以在这个区域内绘制所需的图像内容。创建手势监听器对象(panGesture,下同),例如:使用指令let panGesture = UIPanGestureRecognizer(),即创建UIPanGestureRecognizer对象并命名为panGesture。手势监听器用于捕捉用户的交互手势,例如拖动操作。手势监听器可以感知用户在屏幕上的滑动动作,并触发相应的事件处理函数。
进一步的,通过手势监听器用户可以直接与应用程序进行交互。在裁剪场景中,用户可以使用拖动手势自由选择裁剪区域,提供了直观的用户体验。手势监听器能够实时捕捉用户的手势动作,保证了用户操作的即时性,使得裁剪操作能够随着手指的移动而实时更新。可以引入不同类型的手势监听器,例如缩放手势、旋转手势等,为用户提供更多裁剪选项。另外,结合力触、3D Touch等交互技术,可以进一步拓展用户体验。通过创建图像渲染器和手势监听器,可以使得用户能够在预览图层上进行直观、实时的裁剪操作。
在一实施例中,所述步骤S102,包括:
分别创建所述图像渲染器和滑动手势监听器;
将所述图像渲染器的宽度和高度分别设置为所述预览图层的宽度和高度;
将所述滑动手势监听器添加到所述预览图层上。
在本实施例中,创建图像渲染器对象,并将其宽度和高度分别设置为预览图层的宽度和高度。例如:使用指令let renderer = UIGraphicsImageRenderer(size:previewView.bounds.size),即创建一个 UIGraphicsImageRenderer 对象,指定了绘制图像的大小为previewView.bounds.size,如此,图像渲染器的绘制区域与预览图层的大小一致,确保生成的自定义图像与预览图层匹配。创建滑动手势监听器对象,例如:letpanGesture = UIPanGestureRecognizer(),将滑动手势监听器添加到预览图层上,使得用户可以在预览图层上进行滑动操作。
具体的,通过将图像渲染器的尺寸设置为预览图层的尺寸,确保了生成的自定义图像与用户预览的画布大小一致,避免了图像拉伸或变形,提供了更真实的预览效果。滑动手势监听器允许用户实时进行交互,可以在预览图层上随意滑动,选择需要裁剪的区域。这种实时性增强了用户体验,使得用户能够更加直观地操作。
在步骤S103中,通过手势监听器,系统能够识别用户在预览图层上的各种手势操作,包括滑动、拖动等。手势监听器可以获取到相对于预览图层的坐标位置(通常是CGPoint类型的坐标),这个坐标信息可以被用于后续的操作,比如裁剪区域的确定。手势监听器能够实时响应用户的交互动作,当用户在预览图层上滑动手指时,手势监听器会即时捕捉到滑动的方向和距离。通过手势监听器,用户可以以自然的方式与应用程序进行交互,而不需要依赖硬件设备(如鼠标)。
进一步的,可以引入不同类型的手势监听器,例如Pinch(捏合手势)、Rotation(旋转手势)等;另外,结合力触、多点触控等技术,可以进一步扩展用户的交互体验,实现更加精细和直观的操作。通过手势监听器,用户可以通过触摸、滑动等自然的手势来与应用程序进行交互,提高了用户的操作便捷性和效率。
在一实施例中,所述步骤S103,包括:
判断用户在屏幕上的交互信息是否位于所述预览图层内,若否,则利用所述手势监听器继续获取下一次用户在屏幕上的交互信息;若是,则利用所述手势监听器获取用户在所述预览图层的交互信息;其中,所述交互信息包括触摸点坐标。
在本实施例中,通过手势监听器获取的触摸点坐标,应用程序可以判断这个坐标是否位于预览图层内。如果坐标在预览图层外,应用程序会继续等待下一次的用户交互信息,直到用户在预览图层内部进行交互。一旦确定用户的交互点在预览图层内,手势监听器会提供这个准确的坐标信息,这个信息可以被用于识别用户的具体操作,比如在图像上进行裁剪的起点和终点坐标。
具体的,通过判断触摸点坐标是否在预览图层内,确保了应用程序只会响应预览图层范围内的用户操作,增强了交互的准确性。避免了用户在意外情况下误触发预览图层之外的操作,提供了更好的用户体验。这种交互判断和信息获取机制,保证了应用程序只会对用户在指定区域内的操作作出响应,增加了用户体验的稳定性和一致性。
在步骤S104中,使用图像渲染器,应用程序可以开启一个指定大小的绘制区域,这个区域通常与预览图层的大小相同,这个区域将用于绘制蒙版图层的目标填充图像。在这个绘制区域内,应用程序可以使用图形上下文(Graphics Context,下同)和蒙版图层的目标填充图像绘制各种图形、颜色和纹理,如此,蒙版图层的内容就被绘制到了这个指定的区域内。
具体的, 应用程序可以根据需要,以任意形式、颜色和纹理绘制蒙版图层的内容,提供了高度的定制化绘制能力。由于是在绘制区域内进行的绘制,应用程序可以动态地更新蒙版图层的内容,比如在用户交互时实时改变蒙版图案,提供更加生动和具有反馈性的用户体验。还可以引入更高级的绘制技术,例如使用OpenGL或Metal等图形渲染框架,实现更加复杂和高性能的绘制效果。
在一实施例中,所述步骤S104,包括:
获取所述蒙版图层的contents属性中的图像数据;
利用所述图像数据创建一个UIImage对象;
将所述UIImage对象绘制在所述蒙版图层上,得到所述目标填充图像;
将所述蒙版图层的原始填充图像替换为所述目标填充图像。
在本实施例中,应用程序可以通过蒙版图层的contents属性获取到蒙版图层的图像数据,这些数据通常以CGImage的形式呈现。应用程序可以利用获取到的CGImage数据创建一个UIImage对象,这个UIImage对象将包含蒙版图层的图像内容。应用程序将这个UIImage对象绘制在蒙版图层上,此时蒙版图层的内容将被替换为UIImage对象所包含的图像内容。通过获取并替换蒙版图层的图像数据,应用程序可以实现动态更新蒙版图案,使得应用的界面可以根据用户操作或其他因素实时变化。这种机制可以用于实现实时反馈,例如在用户绘制路径时,蒙版图案可以根据用户手势的轨迹实时变化,提供更加直观的操作体验。
在步骤S105中,根据用户交互信息(通常为触摸点的坐标),应用程序创建一个滑动路径,这个路径代表了用户在预览图层上的滑动轨迹。应用程序利用这个滑动路径,决定在蒙版图层的目标填充图像上进行裁剪或还原操作。在滑动路径经过的区域,可以将蒙版图层的目标填充图像进行裁剪(即变为透明)或还原(根据之前备份的图像数据进行还原),得到一个部分透明或完全不透明的绘制图像。利用滑动路径进行裁剪或还原操作,使得用户可以通过手势直接参与到图像处理的过程中,提供更加直观和自然的交互体验。应用程序可以实时根据用户手势的滑动轨迹进行裁剪或还原操作,使得用户能够即时看到操作结果,增加了实时反馈和互动性。
进一步的,可以引入更高级的路径处理技术,例如贝塞尔曲线,使得用户可以创建更加复杂的滑动轨迹。此外,可以结合图像处理算法,例如边缘检测、颜色分割等,使得裁剪或还原操作更加智能和精准;还可以考虑引入触摸压力、速度等信息,实现更加精细的裁剪或还原效果。通过滑动路径的方式,用户可以直观地参与到图像处理的过程中,根据个人需求进行裁剪或还原操作。在技术拓展方面,可以结合各种图像处理算法和硬件信息,实现更加智能、高效和个性化的图像处理。
在一实施例中,所述步骤S105,包括:
创建一个UIBezierPath对象;其中,所述UIBezierPath对象用于存储所述滑动路径的信息;
将上一个所述触摸点坐标作为路径起点以及将当前所述触摸点坐标作为路径终点;
将所述路径起点和路径终点进行连线,并将所述UIBezierPath对象中的路径宽度设置为预定参数,得到所述滑动路径。
在本实施例中,在应用程序中,创建一个UIBezierPath对象,并将其命名为linePath,用于存储用户滑动的路径信息。UIBezierPath通常是一个UIBezierPath实例,它可以存储多个点的信息,形成一条路径。当用户触摸屏幕时,获取当前触摸点的坐标,并将其作为路径的起点。随着用户的手指滑动,获取滑动过程中的新触摸点坐标,将其作为路径的终点。将路径起点和终点进行连线,即通过UIBezierPath对象记录下用户手指滑动的轨迹。在UIBezierPath对象中设置路径的宽度,这个宽度可以根据预定参数进行设定,决定了滑动路径的粗细,比如预定参数可以设定为4,也可以根据实际需求进行调整。
具体的,通过UIBezierPath对象,应用程序可以实时记录下用户的滑动轨迹,存储了用户的交互信息,为后续的裁剪或还原操作提供了基础数据。应用程序可以根据需要调整路径的宽度,实现滑动路径的精细控制。这种控制可以用于创建不同粗细的裁剪边缘或者还原线条,增加了图像处理的灵活性。通过UIBezierPath对象,应用程序能够灵活地记录和处理用户的滑动轨迹,实现更加精细和个性化的图像裁剪或还原操作。
在一实施例中,所述步骤S105,还包括:
当对所述目标填充图像进行裁剪时,将所述目标填充图像与所述原始填充图像的叠加像素点的颜色值设置为所述原始填充图像的颜色值,以及将所述目标填充图像与所述原始填充图像的叠加像素点的透明度设置为所述目标填充图像的透明度乘以所述原始填充图像的透明度;其中,所述目标填充图像与所述原始填充图像的叠加像素点的透明度为全透明;
或者,
当对所述目标填充图像进行还原时,将所述目标填充图像与所述原始填充图像的叠加像素点的颜色值设置为所述目标填充图像的颜色值,以及将所述目标填充图像与所述原始填充图像的叠加像素点的透明度设置为所述目标填充图像的透明度;其中,所述目标填充图像与所述原始填充图像的叠加像素点的透明度为不透明。
在本实施例中,当对目标填充图像进行裁剪或者还原时,涉及到叠加像素点的处理,这些像素点位于目标填充图像与原始填充图像重叠的区域,需要根据需求进行颜色值和透明度的调整,以实现裁剪或还原的效果。
裁剪操作:
需要将叠加像素点的颜色值设置为原始填充图像的颜色值,保持颜色的一致性。透明度方面,将叠加像素点的透明度设置为目标填充图像的透明度乘以原始填充图像的透明度,确保裁剪区域的透明度与原图保持一致。对于完全裁剪的区域,透明度为全透明,使其不可见。
还原操作:
叠加像素点的颜色值保持为目标填充图像的颜色值,保持还原后图像的色彩一致性。透明度方面,将叠加像素点的透明度设置为目标填充图像的透明度,使其完全不透明。
具体的,在iOS系统中,图像的混合模式与透明度设置在图像绘制过程中起到关键作用。在裁剪操作中使用sourceIn混合模式,即将混合模式设为sourceIn。这意味着在新图像与源图像叠加的区域,像素点的颜色值会取决于源图像的颜色值,透明度则为新图像透明度乘以源图像透明度。在还原操作中使用normal混合模式,即将混合模式设为normal,如此,在新图像与源图像叠加的区域,新图像的颜色值与透明度会覆盖源图像的颜色值与透明度。在裁剪操作中的透明度设置为0(全透明),确保裁剪区域内的像素点都会变为全透明,从而实现填充图像在指定范围内被裁剪的效果。在还原操作中的透明度设置为1(不透明),确保还原后的区域完全不透明,保持填充图像的原始透明度。
在步骤S106中,当完成了所需的绘制操作后,需要对绘制区域进行关闭,并将得到的绘制图像进行最终的图像渲染。利用图像渲染器的功能,关闭之前开启的绘制区域。将绘制图像传递给图像渲染器,进行最终的渲染操作。在这个阶段,可以对图像进行进一步的处理,如调整亮度、对比度、饱和度等,以满足特定的视觉效果需求。图像渲染阶段可以进行各种自定义的处理,例如添加滤镜效果、调整颜色饱和度等,使得最终的渲染图像符合特定的设计需求。利用图像渲染器进行最终的处理,可以优化性能,确保图像处理操作的流畅性和响应速度。
进一步的,在图像渲染阶段,可以利用多通道渲染技术,对图像的不同通道(如红色、绿色、蓝色等)进行单独处理,增加图像的多样性。集成先进的图像处理滤镜,例如模糊、锐化、变形等,增加图像处理的复杂度和效果,提供更丰富的用户体验。对于需要实时处理和展示的场景,可以将图像渲染操作嵌入到定时器或帧刷新回调函数中,实现实时动态的图像处理和展示。
在步骤S107中,渲染图像被设置为蒙版图层的最终填充图像,并且通过预览图层进行透明度映射,得到最终的预览效果。渲染得到的图像被赋值给蒙版图层的contents属性,如此,蒙版图层就被最终确定下来,即图像经过裁剪或还原后的效果。将蒙版图层的最终填充图像通过预览图层进行透明度映射。这一步骤可以根据图像的透明度值调整预览效果,使得处理后的图像在预览界面中呈现出符合期望的透明度效果。
具体的,通过透明度映射,可以确保预览效果与最终呈现效果在透明度上保持一致,使得用户在预览阶段就能够看到最终的图像效果,提高用户体验。映射结果的实时更新使得用户能够在操作过程中获得直观的反馈,帮助用户更好地了解他们的操作所产生的效果。透明度映射允许用户根据需求对图像的透明度进行微调,实现更细致的图像效果控制。对于复杂的图像处理场景,可以使用多层次的透明度映射,根据图像的不同区域或元素,分别进行透明度的调整,实现更精细的图像处理。结合用户的交互操作,例如滑动条或按钮,允许用户在预览过程中动态调整透明度映射参数,实现个性化的图像处理效果。
综上所述,将渲染图像设置为蒙版图层的最终填充图像,并通过透明度映射得到预览效果,是图像处理中的关键步骤,它确保了用户在处理过程中能够直观、准确地了解图像的最终效果,同时为用户提供了良好的控制和交互体验。
在步骤S108中,通过图像渲染器将原始图片的颜色值与透明度映射的结果进行结合,绘制得到最终的裁剪或还原图片。利用图像渲染器,将原始图片与透明度映射的结果进行结合。这一步骤中,透明度映射的结果会影响图像的透明度,而颜色值则保持原始或者根据需要进行调整,具体操作取决于图像处理的目标,是裁剪还是还原。
本发明通过改进Core Graphics框架的图像渲染流程,结合最新的技术工具和iOS手势交互技术,实现了像素级别的图形自由裁剪或者自由还原操作。在这个优化后的渲染流程中,不仅能够精确裁剪图形,还具备随时还原图形裁剪的功能。即意味着用户可以在任何时候撤销之前的裁剪操作,获得更高度的操作灵活性和用户体验,大大提高了用户的工作效率。
结合图3所示,图3为本发明实施例提供的一种基于iOS的图片裁剪与还原装置的示意性框图,基于iOS的图片裁剪与还原装置300,包括:
图层创建单元301,用于分别创建预览图层和蒙版图层,并将所述蒙版图层设置为所述预览图层的蒙版;其中,所述预览图层的原始填充图像为原始图片,所述蒙版图层的原始填充图像为纯色图片;
图层赋予单元302,用于分别创建图像渲染器和手势监听器,并将所述手势监听器赋予所述预览图层;其中,所述图像渲染器用于生成自定义图像,所述手势监听器用于监听用户的交互手势;
信息获取单元303,用于利用所述手势监听器获取用户在所述预览图层的交互信息;
图层绘制单元304,用于利用所述图像渲染器开启对应所述蒙版图层的绘制区域,并在所述绘制区域上绘制所述蒙版图层的目标填充图像;
路径绘制单元305,用于根据所述交互信息创建滑动路径,并利用所述滑动路径对在所述绘制区域上绘制的所述蒙版图层的目标填充图像进行裁剪或者还原,得到绘制图像;
图像渲染单元306,用于利用所述图像渲染器关闭所述绘制区域,并对所述绘制图像进行图像渲染得到渲染图像;
图层映射单元307,用于将所述渲染图像设置为所述蒙版图层的最终填充图像,并利用所述预览图层对所述蒙版图层的最终填充图像进行透明度映射,得到对应所述预览图层的映射结果;
图片输出单元308,用于利用所述图像渲染器将所述原始图片的颜色值与所述映射结果进行结合绘制,得到最终的裁剪或者还原图片。
在本实施例中,图层创建单元301分别创建预览图层和蒙版图层,并将所述蒙版图层设置为所述预览图层的蒙版;其中,所述预览图层的原始填充图像为原始图片,所述蒙版图层的原始填充图像为纯色图片;图层赋予单元302分别创建图像渲染器和手势监听器,并将所述手势监听器赋予所述预览图层;其中,所述图像渲染器用于生成自定义图像,所述手势监听器用于监听用户的交互手势;信息获取单元303利用所述手势监听器获取用户在所述预览图层的交互信息;图层绘制单元304利用所述图像渲染器开启对应所述蒙版图层的绘制区域,并在所述绘制区域上绘制所述蒙版图层的目标填充图像;路径绘制单元305根据所述交互信息创建滑动路径,并利用所述滑动路径对在所述绘制区域上绘制的所述蒙版图层的目标填充图像进行裁剪或者还原,得到绘制图像;图像渲染单元306利用所述图像渲染器关闭所述绘制区域,并对所述绘制图像进行图像渲染得到渲染图像;图层映射单元307将所述渲染图像设置为所述蒙版图层的最终填充图像,并利用所述预览图层对所述蒙版图层的最终填充图像进行透明度映射,得到对应所述预览图层的映射结果;图片输出单元308利用所述图像渲染器将所述原始图片的颜色值与所述映射结果进行结合绘制,得到最终的裁剪或者还原图片。
在一实施例中,所述图层创建单元301,包括:
对象单元,用于创建一个CALayer对象,并赋值给所述蒙版图层;
引用单元,用于将所述蒙版图层的contents属性设置为引用一张图片的颜色属性;
设置单元,用于将所述蒙版图层设置为所述预览图层的蒙版。
在一实施例中,所述图层赋予单元302,包括:
元件单元,用于分别创建所述图像渲染器和滑动手势监听器;
边界单元,用于将所述图像渲染器的宽度和高度分别设置为所述预览图层的宽度和高度;
添加单元,用于将所述滑动手势监听器添加到所述预览图层上。
在一实施例中,所述信息获取单元303,包括:
判断单元,用于判断用户在屏幕上的交互信息是否位于所述预览图层内,若否,则利用所述手势监听器继续获取下一次用户在屏幕上的交互信息;若是,则利用所述手势监听器获取用户在所述预览图层的交互信息;其中,所述交互信息包括触摸点坐标。
在一实施例中,所述图层绘制单元304,包括:
获取单元,用于获取所述蒙版图层的contents属性中的图像数据;
数据单元,用于利用所述图像数据创建一个UIImage对象;
绘制单元,用于将所述UIImage对象绘制在所述蒙版图层上,得到所述目标填充图像;
替换单元,用于将所述蒙版图层的原始填充图像替换为所述目标填充图像。
在一实施例中,所述路径绘制单元305,包括:
路径单元,用于创建一个UIBezierPath对象;其中,所述UIBezierPath对象用于存储所述滑动路径的信息;
坐标单元,用于将上一个所述触摸点坐标作为路径起点以及将当前所述触摸点坐标作为路径终点;
连线单元,用于将所述路径起点和路径终点进行连线,并将所述UIBezierPath对象中的路径宽度设置为预定参数,得到所述滑动路径。
在一实施例中,所述路径绘制单元305,还包括:
裁剪单元,用于当对所述目标填充图像进行裁剪时,将所述目标填充图像与所述原始填充图像的叠加像素点的颜色值设置为所述原始填充图像的颜色值,以及将所述目标填充图像与所述原始填充图像的叠加像素点的透明度设置为所述目标填充图像的透明度乘以所述原始填充图像的透明度;其中,所述目标填充图像与所述原始填充图像的叠加像素点的透明度为全透明;
或者,
还原单元,用于当对所述目标填充图像进行还原时,将所述目标填充图像与所述原始填充图像的叠加像素点的颜色值设置为所述目标填充图像的颜色值,以及将所述目标填充图像与所述原始填充图像的叠加像素点的透明度设置为所述目标填充图像的透明度;其中,所述目标填充图像与所述原始填充图像的叠加像素点的透明度为不透明。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本发明实施例还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供了一种计算机设备,可以包括存储器和处理器,存储器中存有计算机程序,处理器调用存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然计算机设备还可以包括各种网络接口,电源等组件。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。