jjzjj

图像处理之滤镜、图文排版的开发详解,从入门到起飞

华为开发者论坛 2023-03-28 原文
在上一篇如何给应用增加图片编辑功能:剪裁、滤镜、贴纸、排版、标签,我们详细讲解了“图片”风口下,各类应用可能面临的“窘境”:由于应用内缺乏图片编辑设计能力,或者提供的图片编辑设计能力不足,导致原本功能强大的优质应用,没法提高用户留存率,影响应用自身竞争实力。华为图像服务旨在为各类交互应用解决这一问题,可以说是应时而生,应势而生。在详细介绍华为图像服务五大图像编辑能力分别是什么、各自的应用场景以及功能价值的基础上,接下来将为大家带来五大图片编辑功能的具体开发步骤。

 

滤镜服务

开发步骤

 

滤镜服务开发步骤如下,需要您提供图片和相关参数,得到相应的返回值。

1、导入滤镜服务包。

 

Java代码

import com.huawei.hms.image.vision.*;    
import com.huawei.hms.image.vision.bean.ImageVisionResult;
2、获取滤镜服务实例。

Java代码

 

// 获取ImageVisionImpl对象    
 ImageVisionImpl imageVisionAPI = ImageVision.getInstance(this);
3、服务初始化,调用setVisionCallBack时需要实现ImageVision.VisionCallBack接口,重写其中的onSuccess(int successCode)和onFailure(int errorCode)方法。

 
  • 框架初始化成功后会回调onSuccess方法,在onSuccess方法中,需要再初始化滤镜服务。调用滤镜初始化接口时,只有通过校验,第三方应用才能使用滤镜服务,initCode必须为0,滤镜服务初始化成功。

  • 框架初始化失败时会回调onFailure方法,传回失败错误码。

imageVisionAPI.setVisionCallBack(new ImageVision.VisionCallBack() {
    @Override
    public void onSuccess(int successCode) {
       int initCode = imageVisionAPI.init(context, authJson);
       ...
    }
    @Override
    public void onFailure(int errorCode) {
        ...
    }
});
入参authJson:

 

参数列表

类型

M/O(必选/可选)

说明

projectId

String

M

您在配置AppGallery Connect时得到的项目ID(agconnect-services.json文件中的product_id)。

appId

String

M

当前App的APPID(agconnect-services.json文件中的app_id)。

authApiKey

String

M

鉴权使用的Apikey(agconnect-services.json文件中的api_key)。

clientSecret

String

M

客户端秘钥(agconnect-services.json文件中的client_secret)。

clientId

String

M

客户端ID(agconnect-services.json文件中的client_id)。

token

String

O

会话token,用于验证第三方App身份,建议由您的服务器通过client_id+client_secret从AGC获取。

说明:图文智能排版服务,图像主题标签服务token为必选值,获取方式参见:token获取方式

4、构建参数对滤镜服务requestJson示例:象。

参数列表

类型

M/O(必选/可选)

说明

requestJson

JSONObject

M

图片处理请求参数。

imageBitmap

Bitmap

M

需要处理的图片(宽高比在1:3和3:1之间,宽高像素均不超过8000)。

requestJson字段信息:

参数列表

类型

M/O(必选/可选)

说明

requestId

String

O

业务提供的请求ID。

taskJson

JSONObject

M

具体的业务请求信息。

authJson

JSONObject

M

鉴权参数。

滤镜的taskJson字段信息:

参数列表

类型

M/O(必选/可选)

说明

filterType

int

O

颜色映射的图片索引,索引范围[0,24](0为原图)。

intensity

float

O

滤镜强度,取值范围[0,1.0],默认为1.0。

compressRate

float

O

压缩率,取值范围(0,1.0],默认为1.0。

 

filterType映射表:

1

2

3

4

5

6

7

8

9

10

11

12

黑白

棕调

慵懒

小苍兰

富士

桃粉

海盐

薄荷

蒹葭

复古

棉花糖

青苔

13

14

15

16

17

18

19

20

21

22

23

24

日光

时光

雾霾蓝

向日葵

硬朗

古铜黄

黑白调

黄绿调

黄调

绿调

青调

紫调

authJson映射表:请参见authJson表。

滤镜服务requestJson示例:

{
  "requestId":"requestId",
  "taskJson":{"intensity":"1","filterType":"1","compressRate":"1"},
  "authJson":{"projectId":"projectIdTest","appId":"appIdTest","authApiKey":"authApiKeyTest","clientSecret":"CSecretTest","clientId":"CIdTest","token":"tokenTest"}
}
5、滤镜服务获取结果。

您在调用getColorFilter接口时,需要输入待处理图片的Bitmap,并选择需要的滤镜效果。滤镜服务根据传入的参数对原始图片进行处理后,返回处理后图片的Bitmap。

Java 代码

// 获取visionResult返回值
new Thread(new Runnable() {
    @Override    
    public void run() {
        ImageVisionResult visionResult = imageVisionAPI.getColorFilter(requestJson,imageBitmap);
        }           
    }).start();
visionResult返回值:

参数列表

类型

M/O(必选/可选)

说明

resultCode

int

M

服务状态码

response

JSONObject

O

服务返回的结果。

image

Bitmap

O

处理后的图片数据,对于直接返回图片的API,通过该字段传递处理后的图片数据。

response字段信息:

参数列表

类型

M/O(必选/可选)

说明

requestId

String

O

业务提供的请求id(如果请求携带此参数,则返回此参数值)。

serviceId

String

M

调用的服务名。

 

说明:调用getColorFilter接口时,需要开启一个子线程去执行,不能在主线程执行。

6、停止服务。

当不再需要滤镜效果时,调用该接口停止服务,stopCode为0时,停止服务成功。

if (null != imageVisionAPI) {
    int stopCode = imageVisionAPI.stop();
}

图文智能排版服务

开发步骤

图文智能排版服务开发步骤如下,需要您提供图片和相关参数,得到相应的返回值。

1、导入图文智能排版服务包。

import com.huawei.hms.image.vision.bean.ImageLayoutInfo ;
import com.huawei.hms.image.vision.*;
2、获取图文智能排版服务实例。

// 获取ImageVisionImpl 对象
ImageVisionImpl imageVisionAPI = ImageVision.getInstance(this);
3、服务初始化,与滤镜服务一致,可参见开发步骤中的相关描述。

构建参数对象。

数列表

类型

M/O(必选/可选)

说明

requestJson

JSONObject

M

图片处理请求参数。

imageBitmap

Bitmap

M

需要制作图文智能排版的图片(宽高比9:16)。

requestJson字段信息:

参数列表

类型

M/O(必选/可选)

说明

requestId

String

O

业务提供的请求ID。

taskJson

JSONObject

M

具体的业务请求信息。

authJson

JSONObject

M

鉴权参数

图文智能排版的taskJson字段信息:

参数列表

类型

M/O(必选/可选)

说明

title

String

M

文案标题,必填字段,不超过7个中文汉字(总字符数量不超过10个),如果超过字数限制会被强制截断。

description

String

M

文案内容,不超过44个中文汉字(总字符数量不超过66个),超过字数限制则进行截断,用‘…’代替。

copyRight

String

O

图片版权归属的个人/公司名称,建议不超过7个中文汉字(总字符数量不超过10个),超过字数限制则进行截断,用‘…’代替。

anchor

String

O

“详情”或“查看更多”,建议4个中文汉字(总字符数不超过6个)超过字数限制则进行截断,用‘…’代替。

isNeedMask

boolean

O

是否需要蒙层。

styleList构建参数

JSONArray

O

样式列表,默认[],若为默认值,依据描述文本是否有换行符选择文本;若用户传入list,从用户给出的版式中选择。

取值范围['info1', 'info2', …, 'info9']。

说明
styleList中,info8为竖板排版,当前仅支持中文版式,不支持其他语言版式;info3为默认兜底版式;若用户输入info8且输入标签、文本描述有非中文语种,返回用户info3版式。

 
authJson映射表:请参见authJson字段定义

图文智能排版服务requestJson示例:

Java 代码

{
  "requestId":"requestId",
  "taskJson":{"title":"轻奢新生代","description":"远离城市的喧嚣","copyRight":"华为杂志锁屏","isNeedMask":false,"anchor":"查看详情","styleList":["info1"]},
  "authJson":{"projectId":"projectIdTest","appId":"appIdTest","authApiKey":"authApiKeyTest","clientSecret":"CSecretTest","clientId":"CIdTest","token":"tokenTest"}
}
5、图文智能排版服务获取结果。

在调用analyzeImageLayout接口时,需要输入待处理图片Bitmap并选择样式和需要添加的文字等(构建参数)。图文智能排版服务需要联网,如不联网,则默认反回info3样式。图文智能排版服务会返回ImageLayoutInfo封装类,根据封装类的参数进行view绘制(可以参见示例代码绘制方式)。
// 获取ImageLayoutInfo返回值
new Thread(new Runnable() {
    @Override    
    public void run() {
            ImageLayoutInfo imageLayoutInfo = imageVisionAPI.analyzeImageLayout(requestJson, imageBitmap);
        }           
    }).start();
ImageLayoutInfo返回值:

参数列表

类型

M/O(必选/可选)

说明

resultCode

int

M

返回结果码。

viewGroup

ViewGroup

O

返回的目标view。

maskView

View

O

返回蒙层view(无蒙层时为null)。

response

JSONObject

O

返回结果。

response字段:

参数列表

类型

M/O(必选/可选)

说明

locationX

int

O

返回view位于手机的起始位置X。

locationY

int

O

返回view位于手机的起始位置Y。

maskColor

int

O

返回蒙层的颜色值。

colorHeigh

int

O

返回蒙层的高度(无蒙层时为0)。

requestId

String

O

业务提供的请求ID(如果请求时携带了就返回,没有携带就不返回)。

serviceId

String

M

调用的服务名。

 

说明:①因为接口涉及网络请求,需要开启子线程去调用接口。②使用图文智能排版服务时,您需要保证提供的token是有效的,否则无法使用该服务。③token的获取方式可参见token获取方式

6、停止服务。

当不再需要图文智能排版效果时,调用该接口停止服务,stopCode为0时,执行成功。
if (null != imageVisionAPI) {
    int stopCode = imageVisionAPI.stop();
}
在下一篇中,将继续带来在应用中添加图像裁剪能力、图像主题标签能力、贴纸花字能力的开发详解,敬请期待~

原文链接:developer.huawei.com/consumer/cn…

原作者:胡椒

有关图像处理之滤镜、图文排版的开发详解,从入门到起飞的更多相关文章

  1. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  5. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  6. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  7. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

随机推荐