• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

BeautyCamera: 一键美颜相机

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

BeautyCamera

开源软件地址:

https://gitee.com/madaigou/BeautyCamera

开源软件介绍:

BeautyCamera

项目介绍

一键美颜相机

@Author GQ 2018年06月23日

项目中用到水印相机,还要美颜功能,记录一下实现过程,又看了一部分gpuImage文档的图片滤镜

https://github.com/BradLarson/GPUImage

https://github.com/Dean1990/MagicCamera 这个项目没跑起来 - -b

效果图

1 2 3

使用gpuImage的滤镜实现相机预览

  • 美颜滤镜
gpuImage = GPUImage(this)gpuImage?.setGLSurfaceView(surfaceView)magicFilterGroup = GPUImageFilterGroup()magicFilterGroup?.addFilter(GPUImageBeautyFilter())noMagicFilterGroup = GPUImageFilterGroup()noMagicFilterGroup?.addFilter(GPUImageFilter())//设置滤镜gpuImage?.setFilter(if (isInMagic) magicFilterGroup else noMagicFilterGroup)
  • 使用GLSurfaceView显示相机预览
 <android.opengl.GLSurfaceView            android:id="@+id/surfaceView"            android:layout_width="match_parent"            android:layout_height="match_parent" />
  • 设置图片尺寸
parameters.setPictureSize(pictureSize.width, pictureSize.height)
  • 设置预览尺寸
parameters.setPreviewSize(closelySize.width, closelySize.height)
  • 连续对焦
//连续对焦if (parameters.supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {                parameters.focusMode = Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE}

使用Camera.parameters设置

  • 不同分辨率下预览变形问题
  • 预览分辨率与照片分辨率自适应最接近尺寸
  • 前后置摄像头分辨率问题

设置水印

  • 方法一: 使用canvas将原图片和水印图片重新画出来
//不同分辨率导致水印的大小不同(暂未解决)private fun getView2Bitmap(): Bitmap {    ll_waterMarker!!.isDrawingCacheEnabled = true    var waterBitmapCache = ll_waterMarker.drawingCache    var waterBitmap = Bitmap.createBitmap(waterBitmapCache, 0, 0, ll_waterMarker.width, ll_waterMarker.height)    ll_waterMarker.destroyDrawingCache()    var oriBitmap = (iv_img.drawable as BitmapDrawable).bitmap    var newb = Bitmap.createBitmap(oriBitmap.width, oriBitmap.height, Bitmap.Config.ARGB_8888);    var canvas = Canvas(newb)    canvas.drawBitmap(oriBitmap, 0f, 0f, null)    canvas.drawBitmap(waterBitmap, 0f, (oriBitmap.height - waterBitmap.height).toFloat() - SizeUtil.dp2px(this, 40f), null)    canvas.save(Canvas.ALL_SAVE_FLAG);    canvas.restore();    return newb}
  • 方法二: 截取Layout直接当做绘制好的带水印图片
//截取layout保存图片,会有黑边private fun getScreenPhoto(waterPhoto: RelativeLayout?): Bitmap {    waterPhoto!!.isDrawingCacheEnabled = true    waterPhoto.buildDrawingCache()    var bitmap: Bitmap? = waterPhoto.drawingCache    val width = waterPhoto.width    val height = waterPhoto.height    val bitmap1 = Bitmap.createBitmap(bitmap!!, 0, 0, width, height)    waterPhoto.destroyDrawingCache()return bitmap1}

更多请查看demo


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap