精华内容
下载资源
问答
  • 图片旋转】十五分钟挑战鸿蒙Codelab组件

    千次阅读 热门讨论 2021-04-25 16:10:13
    步骤、运行演示 结果 前言 图片处理是目前移动端APP比较常用的需求之一,作为移动端系统平台,HarmonyOS图像模块已经支持了图像业务的开发。比如,常见的图像解码、图像编码、基本的位图操作、图像编辑等。当然...

    目录

     

    前言

    正文

    步骤一、创建工程

    步骤二、将图片转换为PixelMap

    步骤三、图片参数设置

    步骤四、图片镜像操作

    步骤五、运行演示

    结果


    前言

    图片处理是目前移动端APP比较常用的需求之一,作为移动端系统平台,HarmonyOS图像模块已经支持了图像业务的开发。比如,常见的图像解码、图像编码、基本的位图操作、图像编辑等。当然,也支持通过接口组合来实现更复杂的图像处理逻辑。今天,我们就来看一下。

    正文

    本文以图片的旋转、剪裁、缩放、镜像四种常见操作为例,给大家介绍HarmonyOS图像编解码的相关开发技巧。

    说真的,这是本人第一次使用鸿蒙系统处理图像的API,上手不是那么快。

    第一次使用鸿蒙系统的图像API,姿势不对的话,请各位老司机纠正。

    遇山开道、遇河搭桥。

    来吧,走起!

    步骤一、创建工程

    首先,创建一个空白的java工程,这种方式需要自己书写对应的图片操作执行类,也可以使用上一篇文章中的demo,在其基础上进行修改。

    传送门:【模块-Java布局】十分钟挑战鸿蒙Codelab组件

    创建方式:

    步骤二、将图片转换为PixelMap

    鸿蒙系统图像API就是将所支持格式的存档图片解码成统一的PixelMap图像,再用于后续图像显示或其他处理。其中,常规的操作包括旋转、缩放、剪裁等。类似于点播系统将上传的各类视频和音频需要转换成统一的音频格式和视频格式,比如常见的H264+AAC。

    目前,鸿蒙系统图像API能够支持的格式,包括 JPEG、PNG、GIF、HEIF、WebP、BMP。

    本文相向您介绍的函数 getPixelMapFromResource,其功能就是将resources/base/media目录下的图片资源转换为PixelMap图像,其中入参为图片的资源ID,

    getPixelMapFromResource方法是本文的关键方法,具体实现如下:

    /**
         * 通过图片ID返回PixelMap
         *
         * @param resourceId 图片的资源ID
         * @return 图片的PixelMap
         */
        private PixelMap getPixelMapFromResource(int resourceId) {
            InputStream inputStream = null;
            try {
                // 创建图像数据源ImageSource对象
                inputStream = getContext().getResourceManager().getResource(resourceId);
                ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
                srcOpts.formatHint = "image/jpg";
                ImageSource imageSource = ImageSource.create(inputStream, srcOpts);
    
                // 设置图片参数。本例使用图片像素的尺寸为1024*768
                // 点击一次旋转按钮会进行90度的旋转,
                // 缩放是按照2:1的比例进行缩放,
                // 剪裁是保证宽度不变的情况下对高度进行400像素的剪裁,
                ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();
                // 旋转
                decodingOptions.rotateDegrees = 90 * whirlCount;
                // 缩放
                decodingOptions.desiredSize = new Size(isScale ? 512 : 0, isScale ? 384 : 0);
                // 剪裁
                decodingOptions.desiredRegion = new Rect(0, 0, isCorp ? 1024 : 0, isCorp ? 400 : 0);
                decodingOptions.desiredPixelFormat = PixelFormat.ARGB_8888;
                return imageSource.createPixelmap(decodingOptions);
            } catch (IOException e) {
                HiLog.info(LABEL_LOG, "IOException");
            } catch (NotExistException e) {
                HiLog.info(LABEL_LOG, "NotExistException");
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        HiLog.info(LABEL_LOG, "inputStream IOException");
                    }
                }
            }
            return null;
        }
    

    步骤三、图片参数设置

    本文使用图片是mac OS 10.15系统的桌面背景图片,尺寸为1024*768。

    图片如下:

    本文实现的功能包括:点击一次旋转按钮会进行90度的旋转,缩放是按照2:1的比例进行缩放,剪裁是保证宽度不变的情况下对高度进行400像素的剪裁,相关参数设置如下所示:

    // 设置图片参数 
    ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions(); 
    // 旋转 
    decodingOptions.rotateDegrees = 90 * whirlCount; 
    // 缩放 
    decodingOptions.desiredSize = new Size(isScale ? 512 : 0, isScale ? 384 : 0); 
    // 剪裁 
    decodingOptions.desiredRegion = new Rect(0, 0, isCorp ? 1024 : 0, isCorp ? 400 : 0);

    步骤四、图片镜像操作

    图片镜像操作就是对图片以纵坐标为轴制作对称图片。image绘制的时候会调用onDraw方法,本例采用对图像Canvas画布的镜像操作实现图片的镜像显示,示例代码如下所示:

    private void mirrorImage(PixelMap pixelMap) { 
        scaleX = -scaleX; 
        image.addDrawTask( 
                new Component.DrawTask() { 
                    @Override 
                    public void onDraw(Component component, Canvas canvas) { 
                        if (isMirror) { 
                            isMirror = false; 
                            PixelMapHolder pmh = new PixelMapHolder(pixelMap); 
                            canvas.scale( 
                                    scaleX, 
                                    1.0f, 
                                    (float) pixelMap.getImageInfo().size.width / 2, 
                                    (float) pixelMap.getImageInfo().size.height / 2); 
                            canvas.drawPixelMapHolder( 
                                    pmh, 
                                    0, 
                                    0, 
                                    new Paint()); 
                        } 
                    } 
                }); 
    }

    步骤五、运行演示

    截图是IDE的完整代码:

    执行结果:

    结果

    本文虽然可以把demo运行起来了,但是不够完美,其实之前在windows上跑通过。但是这次用的是mac OS的本子,因为今天是最后的截止时间。没办法,自己又在mac上搞了一遍,不知道是不是鸿蒙图像API在mac上存在兼容问题,还是自己写出了新bug,使用模拟器运行时,有时会崩溃。

    但是,不管怎么说,鸿蒙也一直在进步,期待以后更好用。

    展开全文
  • 5分钟搞定图片鉴黄web应用!

    千次阅读 2018-07-27 15:35:36
    用户上传图片时,页面调用前面构建的图片鉴黄API,他会自动触发函数执行,而开发者编写的函数只需实现接收到图片之后如何处理图片的逻辑(调用内容检测服务服务)即可,最后将结果返回给前端页面。至此,我们就构建...

     

    函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩、免运维、高可靠的方式运行。通过函数工作流,开发者无需配置和管理服务器,只需关注业务逻辑,编写函数代码,以无服务器的方式构建应用,便能开发出一个弹性高可用的后端系统,并按实际运行消耗的资源计费。极大地提高了开发和运维效率,减小了运作成本。

     

    本文我们将介绍如何通过云函数服务快速构建一个无服务的图片鉴黄web应用,如下图,该应用接收用户上传的图片,并对图片进行分析,判断是否为色情图片。

    https://support.huaweicloud.com/bestpractice-functiongraph/zh-cn_image_0119455913.png

     

    试想,如果我们通过传统的模式开发此应用,需要如何开发?

     

    即使是基于现在的云平台,我们也仍需要购买云服务器,关注其规格、镜像、网络等各指标的选型和运维,然后在开发过程中可能还需要考虑与其他云服务的集成使用问题,使代码中耦合大量非业务代码,并且服务器等资源也并非是按需的,可能会造成大量多余的费用。

     

    现在我们可以通过函数工作流服务来快速构建这个系统,并且完全无需关注服务器,且按需运行,如图:

    http://functionstage-tutorial.obs-website.cn-north-1.myhwclouds.com/assets/images/ai.png

    创建函数,在函数中调用华为云内容检测服务提供的图片鉴黄接口,实现图片鉴黄功能,并为该函数配置一个APIG触发器,对外提供图片鉴黄的API,从而构建出一个完整的图片鉴黄无服务系统。然后将web页面的静态资源部署在对象存储服务(OBS)中,用户可以直接从OBS访问前端页面。用户上传图片时,页面调用前面构建的图片鉴黄API,他会自动触发函数执行,而开发者编写的函数只需实现接收到图片之后如何处理图片的逻辑(调用内容检测服务服务)即可,最后将结果返回给前端页面。至此,我们就构建了一个完整的无服务图片鉴黄web应用。

     

    现在,我们将介绍如何端到端地将此无服务应用构建出来,详细教程可以参考:http://functiongraph-tutorial.obs-website.cn-north-1.myhwclouds.com/#/porn-image-analyse

     

    后端系统搭建:

    进入函数服务页面的图片鉴黄模板,该模板已经提供了本应用中函数的代码,按照代码注释中的指示创建函数之后,就成功搭建了本应用的后端系统,为函数所创建的APIG触发器会提供一个调用该后端函数的HTTP(s) API,供外部系统(如前端页面)调用。

     

    前端页面搭建:

    前端的展示形式有很多,这里我们提供了一份Demo供大家学习参考,可以通过上面的详细教程将前端代码包部署到OBS上,快速构建一个单页Web应用(SPA)。然后调用上一步后端提供的接口,连通后端系统,完成整个无服务图片鉴黄Web应用的构建。

     

    总结:

    通过基于函数工作流的无服务架构和传统架构的对比,我们可以看到其具有如下优点:

    1. 无需关注任何服务器,只需关注核心业务逻辑;

    2. 函数运行随业务量弹性伸缩,按需付费,执行才计费,低成本;

    3. 可以通过简单的配置连通函数工作流和其它云服务,甚至云服务和云服务,比如本例中只需创建一个APIG触发器便可完成API网关和函数工作流的连接,然后在函数中调用内容检测服务的鉴黄接口,那么函数就像一个粘合剂一样将两个云服务连接在一起。

     

    欢迎体验!

    https://www.huaweicloud.com/product/functiongraph.html?utm_source= zjqd&utm_medium=mediafree&utm_campaign=functiongraph&utm_content=article-0727-2

    展开全文
  • 主要介绍了用html+css+js实现的一个简单的图片切换特效,需要的朋友可以参考下
  • :top_hat: 个人资料图片! 在Vercel上部署了无服务器功能,每5分钟通过对其进行ping操作,并在进行ping操作。
  • 包含三种方式的拍照(头像处理、普通图片处理、从相册多选图片),只需跳转对应Activity,在返回的onActivityResult方法中处理返回的path就行
  • 如果1分钟,输入的密码还是错误的,那么手机将被锁定5分钟3. 如果还是输入错误密码,手机将会锁定更长的时间,最后会被停用4. 所以,为了避免手机被锁定或者停用的情况,一定要输入正确的密码。...

    iphone手机出现已停用请五分钟再试怎么办

    当苹果手机出现了iphone已停用请五分钟再试怎么办呢,下面小编介绍一下。

    具体如下:

    1. 当解锁苹果手机时,连续输错了四次密码后,会出现1分钟后才能继续输入密码

    4fe0ab276e12e5df693e541c9621537e.png

    2. 如果1分钟后,输入的密码还是错误的,那么手机将被锁定5分钟

    811fb50f22a63a978bac75a1f4b11cea.png

    3. 如果还是输入错误密码,手机将会锁定更长的时间,最后会被停用

    c68e067ad0bf9adc7afa2e1065e83710.png

    4. 所以,为了避免手机被锁定或者停用的情况,一定要输入正确的密码。

    cfb895c64a216330657757393bdd2893.png

    5. 输入了正确的密码后,我们就可以正常使用手机。

    01f80d2543d1f775bb35b19b582e2c74.png

    以上就是iphone手机出现已停用请五分钟再试的解决办法。

    时间:2020-02-29 19:14 / 作者:百科全说

    5a63401d8fa2306cf372be578c407841.gif

    苹果iphone手机显示已停用请五分钟后使用,其实原因很简单,就是我们对手机上的App设置了限制时间使用.1. 如图,我们打开手机屏幕,提示"iTunes U"今天还剩5分钟的屏幕使用时间.2.点击手机桌面上的[设置]图标.3. 进入设置页面,找到[屏幕使用时间]选项,打开.4. 在屏幕使用时间页面,找到[App限额]选项,打开.5. 如图,下面就显示了刚才还剩五分钟的APP,点击它.6. 如图,在下方直接点击[删除限额]即可解除.以上就是苹果iphone手机显示已停用请五分钟后使用的

    5a63401d8fa2306cf372be578c407841.gif

    随着科技的发展,手机已经成为人们日常生活中必不可少的工具,iPhone相信大家都不陌生,若是在使用iPhone苹果手机时,手机处于已停用状态,我们应该如何进行恢复呢?接下来就由小编来告诉大家.具体如下:1. 第一步,打开另一部iPhone手机后在桌面上找到查找iPhone图标,点击进入.2.第二步,进入主页后输入id与密码后点击下方的登陆按钮.3.第三步,登陆成功后进入app主页后,点击下方的设备.4. 第四步,选择设备后点击下方的操作按钮.5. 第五步,在下方的三个功能中点击抹掉iPhone即

    5a63401d8fa2306cf372be578c407841.gif

    苹果手机更新换代得比较快,很多果粉都愁于怎么把旧iPhone手机的内容转移到新iPhone手机中,其实大家不用担心,下面的方法都可以帮到大家!具体如下:第一种方法:1.首先,我们同时在新旧iPhone手机的设置APP中登陆我们的Apple ID账号.2. 这时,我们在iCloud页面中分别打开iCloud云备份.照片流.通讯录.备忘录选项右侧的按钮.3. 此时,我们会在新手机中发现,除短信内容未转移到新手机外,照片.通讯录.备忘录的内容都转移到新手机里了.4. 我们还有第二种方法,首先:我们同时

    5a63401d8fa2306cf372be578c407841.gif

    今天给大家介绍一下苹果iPhone手机 应用中如何禁止弹出评分及评论的窗口的具体操作步骤.1. 首先打开我们的 iPhone 手机,找到桌面上的「设置」图标,打开.2. 进入设置页面,点击「iTunes Store 与 App Store」选项.3. 然后在新的页面,向上滑动屏幕,找到「App 内评分及评论」,将其右侧的开关关闭即可.以上就是苹果iPhone手机 应用中如何禁止弹出评分及评论的窗口的具体操作步骤.

    5a63401d8fa2306cf372be578c407841.gif

    苹果iphone手机老弹出备份失败的提示是因为我们的iCloud储存空间不足,无法完成备份,我们选择将备份关闭即可解决.1. 如图,弹出以下提示2. 首先打开手机上的设置图标,然后在打开的设置页面,点击我们的个人头像3. 在打开的页面,点击iCloud选项4. 在打开的iCloud页面,向上滑动屏幕,找到iCloud云备份,点击5. 如图,将iCloud云备份右侧的开关关闭6. 然后弹出的确认窗口,点击好.7. 在我们的第2步中,有两条Apple ID建议消息,我们点击进入,在打开的页面点击下方

    5a63401d8fa2306cf372be578c407841.gif

    今天给大家介绍一下苹果iphone手机弹出无法验证更新的提示的具体解决方法.1. 首先确认一下是否是因为内存不足,导致系统无法安装.打开手机上的设置图标,然后找到页面中的通用选项,点击.2. 在打开的"通用"页面,找到iPhone储存空间选项,打开,就可以查看一下内存状况了.3. 另外,确认一下是否是因为下载时间过长,导致系统文件缺失,才更新失败的.我们只要将刚才下载的系统删除后,保持手机网络连接稳定,然后进行重新下载即可解决.4. 还有一种可能,就是系统是测试版本,下载的系统型号可能

    5a63401d8fa2306cf372be578c407841.gif

    iPhone手机iOS13.3新增了限定通信功能,可以设置在停用期间与指定联系人通信,有些用户不知道如何设置iPhone手机限定通信,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步打开手机中的[设置]App,根据下图箭头所指,找到并点击[屏幕使用时间]选项.2. 第二步进入[屏幕使用时间]页面后,根据下图箭头所指,点击[限定通信]选项.3. 第三步进入[限定通信]页面后,根据下图箭头所指,能够分别设置在允许的屏幕使用时间内以及停用时间内可以与谁通信,小编以停用期间为例,点击

    5a63401d8fa2306cf372be578c407841.gif

    Win8使用iTunes连接iPhone手机时提示"无法连接"解决方法一: 1.先确认用来连接手机和电脑的数据连接线是不是原装的,因为山寨版的数据线会导致 iTunes 检测不到手机.有的山寨版数据线只能用于手机充电,却不能与 iTunes 连接.如果是山寨的数据线,请换用原装的数据来连接手机与电脑; 2.如果数据连接线是原装的话,还是不能检测到手机,那请尝试把连接到电脑端的 USB 插口更换一个.有可能 USB 端口出现功能性故障或是接触不良的情况. Win8使用iTunes连接iP

    5a63401d8fa2306cf372be578c407841.gif

    现在很多用户都购买iphone手机,经常会在win8.1系统电脑上传或下载一些图片.应用等,在连接电脑的时候可能会碰到一些问题.比如最常见的win8.1无法识别iphone手机,没有任何反应,这样就没办法下载应用了,电也冲不了,怎么回事呢?带着此疑问,接下去我们一起来学习下win8.1无法识别iphone手机的解决方法. 解决方法: 1.首先,请检查系统Device Install Service服务是否被360“优化”停用了,如果被停用请重新开启该服务即可解决问题; 2.或者,打开开始菜单,选

    展开全文
  • 图片说明:TCP是以太网协议和IP协议的上层协议,也是应用层协议的下层协议。)最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。(图片说明:以太网协议解决...
  • html5在线色盲测试小游戏源代码。游戏规则:1、找出(点击)与其他颜色不同的色。2、时间限定一分钟,点击错误颜色扣3秒时间。
  • img标签加载图片404错误解决方案 一、前言 在开发中,使用<img src = "/img/yys.png" />加载图片时,会有404错误,也就是图片未找到问题。 现将解决办法总结如下: 二、解决...

                                          img标签加载图片404错误解决方案

    一、前言

           在开发中,使用<img src = "/img/yys.png" />加载图片时,会有404错误,也就是图片未找到问题。

               解决办法 总结如下:

    二、解决方案 

           当图片未找到或者404时,就会触发<img />标签的 onerror 属性显示其中的图片。

    
        1、直接拼写路径方式:
    
        <img src = "img/yys.png" onerror = "javascript:this.src = 'img/default.png'" />
    
    
        2、事件绑定方式:
    
        <img src = "img/yys.png" onerror = "javascript:getImage('img/default.png')" />
    
        function getImage(imgUrl) {
      
            var img = event.srcElement;
    
            img.src = imgUrl;
    
        }
    
        
    
      ------------------------------------- ↓↓↓↓↓ -------------------------------------
    
        特别注意:如果默认图片(img/default.png)也不存在,如何解决:
        
        <img src = "img/yys.png" onerror = "this.onerror = ''; this.src = 'img/default.png'" />
    
      ------------------------------------- ↑↑↑↑↑ -------------------------------------
        
    

                           Now ~ ~ ~写到这里,就写完了,如果有幸帮助到你,请记得关注我,共同一起见证我们的成长

    展开全文
  • Android广告图片轮播控件 GitHub地址 https://github.com/youth5201314/banner 1.添加依赖 //图片轮播框架 implementation 'com.youth.banner:banner:1.4.10' //glide,比较好的版本,Matisse...
  • PHP+jQuery+html5实现图片选取裁剪上传(兼容手机上传)

    千次下载 热门讨论 2015-04-24 11:20:25
    在网上找到了图片上传插件jquery.min.js,但没有上传功能,自己花了10分钟给加上去了哈,有bug留言,一般当天改完上传。 转自:素材火jQuery教程演示:http://www.sucaihuo.com/js/71.html
  • js上传图片校验图片格式、大小、尺寸宽高 一、前言 js上传图片校验图片格式、大小、尺寸宽高。 在此记录下,分享给大家。 二、代码 <input type="file" id="imgFile" name="imgFile" onchange=...
  • python爬虫实战——图片自动下载器之前介绍了那么多基本知识【Python爬虫】入门知识,大家也估计手痒了。想要实际做个小东西来看看,毕竟: talk is cheap show me the code! 制作爬虫的基本步骤顺便通过这个小例子...
  • Android图片下载缓存框架 Android-Universal-Image-Loader 五分钟快速搭建
  • 现在谈红包就兴奋,如果你在微信上收到一个红包,不管是一毛钱还是一分钟,总是很开心的。...这里将分享微信红包图片显示5变成恐怖图或其它文字制作方法,速度来围观哟!微信红包图片截图整人的动态图,预览:...
  • mysql 俩个时间相减分钟

    千次阅读 2021-01-26 07:13:49
    CASEWHEN TIMESTAMPDIFF(MINUTE,o....= THEN'APP解锁计费'ELSE'系统自动计费'ENDTIMESTAMPDIFF(MINUTE,o.createDate,o.chargingStartDate) o.chargingStartDate减去o.createDate相减得到分钟,如果者小于前者...
  • 分钟实现Android多张图片选择

    千次阅读 2017-04-21 13:55:05
    分钟实现Android多张图片选择
  • 1分钟制作朋友圈9宫格图片,不用任何P图软件

    千次阅读 多人点赞 2021-05-18 12:41:00
    目录前言生成9宫格图片生成9宫格动图短视频生成动图9宫格GIF直接生成动图9宫格生成9宫格视频使用pyqt5打包成exe界面 前言 最近网上朋友圈微博已经掀起了9宫格图片的玩法。可以说将单个图片,或者说单个动图亦或视频...
  • 在做项目中,很多时候需要对于素材进行处理,比如:去掉图片上的内容,只要图片 PS的内容识别适用于图片的背景颜色比较单一、颜色不复杂的图片。 操作步骤如下: step 1 第一步:使用ps打开图片 step 2 ...
  • 特别是在做图像处理的时候,我们遇到了一个图片是500*500*3的,另一个是600*500*3的,我们不论是做深度学习还是算欧氏距离啊什么总是因为这些图片的维度不同而头疼,但是很遗憾,你们这个头疼的问题在3分钟之后即将...
  • 10分钟教会你原生JS压缩图片,极其精简版

    万次阅读 多人点赞 2018-11-02 00:41:51
    使用canvas中的API把图片分辨率调低(canvas只能处理base64格式的图片) 2.核心代码 //1.先通过input标签获取本地图片 &amp;amp;amp;lt;input id=&amp;amp;quot;file&amp;amp;quot; type=&amp;...
  • FFmpeg每隔5秒切分视频为图片

    千次阅读 2019-10-30 09:59:56
    ffmpeg -i cv.mp4 -vf fps=0.2 F:\ffmpegTest\img\out%d.png fps为1时按一秒一帧切分,按5秒一帧来切,1/5 = 0.2即可
  • 或者先设置好一张图片后,再通过【F4】键,进行批量设置。 但是呢,这些方法只适合用于少量图片大小的统一中,对于较多的图片,比如几百张图片,用这种方法显然不太适合,既费时又费力。 那么有什么方法...
  • 文件夹有多个txt文档,每天按日期更新一个新的txt文档,已实现将7月4号以前的所有txt文档存入数据库,目前需求每5分钟循环一次文件夹读取新的txt文档将该文档目前所有的数据存入数据库将最后一行的主键(id和时间)...
  • 希望看官5分钟搞定方法,以免再因此耗时并烦恼。 主要介绍了QT程序中导出图片到EXCEL指定单元格的实现过程及源码, VC或其他编程语言同样可参考方法说明通过 Excel.Application导出图片到指定单元格。
  • 分钟学会写简单的图片加载框架

    千次阅读 2015-08-19 16:16:33
    分钟学会图片加载框架
  • https://zhidao.baidu.com/question/2204559435992486268.html?qbl=relate_question_0&word=%B5%E7%C4%D4%CE%AA%CA%B2%C3%B4%C3%BF%B4%CE%B5%E3%BB%F7%C1%ED%B4%E6%CE%AA%CA%B1%CE%C4%BC%FE%B9%DC%C0%ED%C6...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 137,478
精华内容 54,991
关键字:

五分钟后图片