当前位置: 首页 > news >正文

手写一个去视频水印的程序

图片

去水印使用预览

下边和大家一起分析下做这个去水印工具的思路,很多人乍一听 去水印 ,下意识地觉得是一种什么牛比的算法,其实这是一种假象~

刨根问底

虽说要争口气,可刚开始做的时候我也真是一脸懵逼,因为根本不知道该从哪入手,去水印什么原理啊?难不成我还要写个算法?

找了一个抖音视频的分享链接,一点点分析,不难发现这是个经过处理的短链接,那这个短链接一定会重定向到真实的视频地址 URL 。

https://v.douyin.com/JSkuhE4/

浏览器中输入短链接得到了下边这个 URL ,以我的经验判断URL中的 6820792802394262795 很有可能是视频的唯一ID,而唯一ID通常用来作为获取详情接口的入参,哎嘿~ 好像有点头绪了。

https://www.iesdouyin.com/share/video/6820792802394262795/

图片

有水印的链接

赶紧祭出 F12 大法打开控制台,在众多请求中发现这么一个接口,它居然用到了上边的唯一ID。

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6820792802394262795

图片

更惊喜的是接口返回的数据那叫一个详细,作者信息、音频地址、视频地址、平面图都有。但唯独没有无水印的视频 URL

图片

只找到一个有水印的视频 URL,有点小失落,我又看了看这个地址,发现 wm 和我项目名有点像啊,不就是watermark 水印的缩写吗?

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f030000bqk54kg2saj3lso3oh20&ratio=720p&line=0

图片

好像又看到了一丝希望,我赶紧修改URL在浏览器中又试了一下,果然真的没水印了。

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f030000bqk54kg2saj3lso3oh20&ratio=720p&line=0

图片

到这才发现抖音去水印 简单得让人感动,哈哈哈~

身体力行

既然原理都清晰了,剩下的就是一步一步实现功能了,原理看着挺简单的,但实现中还是遇到一点点小坑,浪费了不少时间。

实现过程只有简单的三步:

  • 1、从输入框中过滤取出视频短链接;

  • 2、短链接传到后端解析出无水印的视频 URL

  • 3、视频 URL传递给前端预览、下载。

后端并没有什么难度,一步一步按照上边分析的流程解析真实视频 URL 就可以了。

注意 :我们想得到的地址URL,都是当前短链接URL 经过重定向后的URL。而抖音有些链接是不支持浏览器访问的,所以要手动修改 User-agent 属性模拟移动端访问才可以。

/**
* @param url
* @author xiaofu
* @description 获取当前链接重定向后的url
* @date 2020/9/15 12:43
*/
public static String getLocation(String url) {try {URL serverUrl = new URL(url);HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection();conn.setRequestMethod("GET");conn.setInstanceFollowRedirects(false);conn.setRequestProperty("User-agent", "ua");//模拟手机连接conn.connect();String location = conn.getHeaderField("Location");return location;} catch (Exception e) {e.printStackTrace();}return "";}

下边是完整的后端实现,可以看到代码量非常的少。

/*** @author xiaofu* @description 抖音无水印视频下载* @date 2020/9/15 18:44*/
@Slf4j
@Controller
public class DYController {public static String DOU_YIN_BASE_URL = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=";/*** @param url* @author xiaofu* @description 解析抖音无水印视频* @date 2020/9/15 12:43*/@RequestMapping("/parseVideoUrl")@ResponseBodypublic String parseVideoUrl(@RequestBody String url) throws Exception {DYDto dyDto = new DYDto();try {url = URLDecoder.decode(url).replace("url=", "");/*** 1、短连接重定向后的 URL*/String redirectUrl = CommonUtils.getLocation(url);/*** 2、拿到视频对应的 ItemId*/String videoUrl = "";String musicUrl = "";String videoPic = "";String desc = "";if (!StringUtils.isEmpty(redirectUrl)) {/*** 3、用 ItemId 拿视频的详细信息,包括无水印视频url*/String itemId = CommonUtils.matchNo(redirectUrl);StringBuilder sb = new StringBuilder();sb.append(DOU_YIN_BASE_URL).append(itemId);String videoResult = CommonUtils.httpGet(sb.toString());DYResult dyResult = JSON.parseObject(videoResult, DYResult.class);/*** 4、无水印视频 url*/videoUrl = dyResult.getItem_list().get(0).getVideo().getPlay_addr().getUrl_list().get(0).replace("playwm", "play");String videoRedirectUrl = CommonUtils.getLocation(videoUrl);dyDto.setVideoUrl(videoRedirectUrl);/*** 5、音频 url*/musicUrl = dyResult.getItem_list().get(0).getMusic().getPlay_url().getUri();dyDto.setMusicUrl(musicUrl);/*** 6、封面*/videoPic = dyResult.getItem_list().get(0).getVideo().getDynamic_cover().getUrl_list().get(0);dyDto.setVideoPic(videoPic);/*** 7、视频文案*/desc = dyResult.getItem_list().get(0).getDesc();dyDto.setDesc(desc);}} catch (Exception e) {log.error("去水印异常 {}", e);}return JSON.toJSONString(dyDto);}
}

前端实现也比较简单,拿到后端解析出来的视频URL 预览播放、下载就OK了。

图片

为快速实现我用了老古董JQuery,我这个年纪的人对它感情还是很深厚的,UI框架用的 layer.js

$.ajax({url: '/parseVideoUrl',type: 'POST',data: {"url": link},success: function (data) {$('.qsy-submit').attr('disabled', false);try {var rows = JSON.parse(data);layer.close(index);layer.open({type: 1,title: false,closeBtn: 1,shadeClose: true,skin: 'yourclass',content: `<div style="overflow:hidden;height: 580px;width: 350px;"><div><div class="popButton"><a href="###" rel="noopener nofollow noreferrer" onclick="downloadVideo('${rows['videoUrl']}','${rows['desc']}')"><button class="layui-bg-red layui-btn-sm layui-btn">下载视频</button></a></div><div class="popButton"><textarea id="videourl" cols="1" rows="1" style="height:0;width:0;position: absolute;">${rows['videoUrl']}</textarea><button class="layui-btn-sm layui-bg-blue layui-btn" onclick="copy('videourl')">复制链接</button></div><div class="popButton"><a href="###" rel="noopener nofollow noreferrer" onclick="downloadVideo('${rows['musicUrl']}','${rows['desc']}')"><button class="layui-btn-sm layui-btn">下载音频</button></a></div><video id="video" width="360px" height="500px" src="${rows['videoUrl']}" controls = "true" poster="${rows['videoPic']}" preload="auto" webkit-playsinline="true" playsinline="true" x-webkit-airplay="allow" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" style="object-fit:fill"><source src="${rows['videoUrl']}" type="video/mp4"> </video></div></div>`//content: `<video id="video" src="${rows['videoUrl']}" controls = "true" poster="${rows['videoPic']}" preload="auto" webkit-playsinline="true" playsinline="true" x-webkit-airplay="allow" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" style="object-fit:fill"><source src="${rows['videoUrl']}" type="video/mp4"> </video>`});} catch (error) {layer.alert('错误信息:' + error, {title: '异常',skin: 'layui-layer-lan',closeBtn: 0,anim: 4 //动画类型});return false;}},error: function (err) {console.log(err);layer.close(index);$('.qsy-submit').attr('disabled', false);},done: function () {layer.close(index);}
})
})

注意:我们在自己的网站中引用其它网站的资源URL,由于不在同一个域名下referrer 不同,通常会遇到三方网站的防盗链拦截,所以要想正常访问三方资源,必须要隐藏请求referrer,页面中设置如下参数。

 <!-- 解决访问视频url 请求403异常 --><meta name="referrer" content="no-referrer"/>

还简单做了下移动端适配,样式看着还可以,但是功能使用起来有点差强人意,后边再做优化了。

图片

总结

很多东西就是这样,没认真研究之前总感觉深不可测,可一旦接触到技术的本质,又开始笑自己之前好蠢,懂与不懂有时就差那么一层窗户纸。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

辗转相除求最大公约数

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b 0;int tmp 0;scanf("%d %d", &a, &b);if (a < b){tmp a;a b;b tmp;}if (a%b ! 0){tmp a;a b;b tmp%b;}printf("%d\n", b);return 0; }...

验证排序算法是否稳定

思路&#xff1a;两个连续数字存储在数组中&#xff0c;内存地址是递增的&#xff0c;只需判断两个相同数字内存地址是否还是递增即可。 具体方案&#xff1a;需要自定义MyInteger对象&#xff0c;因为对象才可获取内存地址。此外&#xff0c;获取对象内存地址&#xff0c;需要…...

OnePlus是什么手机

OnePlus 是一家总部位于深圳的智能手机初创公司和生产商&#xff0c;成立于 2013 年 12 月。该公司声名鹊起&#xff0c;其目标是以实惠的价格提供其智能手机的旗舰级规格。OnePlus 最初仅通过邀请系统销售其智能手机&#xff0c;在该系统中&#xff0c;客户将被邀请购买智能手…...

2021年电工(中级)考试内容及电工(中级)作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;2021年电工&#xff08;中级&#xff09;考试内容为正在备考电工&#xff08;中级&#xff09;操作证的学员准备的理论考试专题&#xff0c;每个月更新的电工&#xff08;中级&…...

vue项目写的样式应用不到元素上?elementUI等框架的坑

vue项目写的样式应用不到元素上&#xff1f;scoped原理接着坑就来了解决方法1、修改父元素的样式2、深度作用选择器使用vueelementUI写个项目时发现写的样式应用不到元素上&#xff0c;任凭!important也毫无作用&#xff01;看看你是否也踩了这个坑吧&#xff01; scoped原理 …...

SCI/SSCI

1. [Information Processing and Management](http://www.letpub.com.cn/index.php?pagejournalapp&viewdetail&journalid3564) (一区)...

倾情分享一个yolo3训练识别旗帜的例子

下列链接是一个yolo3识别旗子的例子 https://github.com/ZzzzzZXxxX/yolo3_keras_Flag_Detection 但是下载之后发现训练之后的模型并不好用&#xff0c;什么旗子都识别不了&#xff0c;于是换另外yolo发布版本训练这个Flag的数据 经过反复折腾终于成功。 链接&#xff1a;htt…...

Ensemble Learning

Ensemble Learning 1 高级集成技术 1.0 决策树 元素&#xff1a; 根结点&#xff1a;包含样本的全集内部节点&#xff1a;对应特征属性测试叶节点&#xff1a;代表决策结果 决策树构建一个二叉树来分割数据&#xff0c;预测时&#xff0c;在树的内部节点处用某一属性值进行判…...

vue——父子组件的数据传递

父子组件的数据传递 1、 父>子&#xff08;通过属性的形式&#xff09;&#xff1a; &#xff08;1&#xff09;在子组件的标签里设置属性【如 :count“0” 】。给属性前面加上冒号&#xff0c;参数‘0’会变成数字格式&#xff08;变为一个js表达式&#xff09;&#xff…...

真·杂项:资本论阅读笔记(随缘更新)

Chap1 商品与货币 商品的两个属性&#xff1a;使用价值和价值 商品是使用价值和价值的综合体。 使用价值&#xff1a;物品对人有用&#xff0c;价值分为质&#xff08;属性&#xff09;和量&#xff08;多少&#xff09; 交换价值&#xff1a;一种使用价值和另一种使用价值…...

HMS Core助力同程旅行,打造更贴心的用户出行体验

作为中国在线旅行行业的创新者&#xff0c;同程旅行聚焦年轻、时尚、个性的消费群体&#xff0c;致力于为用户提供更便捷、聪明、安全的出行服务。近年来&#xff0c;同程旅行通过人工智能等创新科技的应用将平台原本的交易撮合角色转变为“管家”和“助手”的角色&#xff0c;…...

C++STL算法 mismatch 中string.c_str()无法直接放到容器中

vs下的输出结果如下 .天地玄黄 日月盈昃 辰宿列张 寒来暑往 秋收冬藏 闰余成岁 闰余成岁 8 0 8 8 8 8 8 8 天地玄黄 日月盈昃 辰宿列张 寒来暑往 秋收冬藏 闰余成岁 律吕调阳 8 0 8 8 8 8 8 8 闰余成岁 7 律吕调阳 7 #include<iostream> #include<cstdlib> #includ…...

vue简单基础

引入vue 新建vue对象 绑定作用范围 {{}} 取值 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http…...

1688API、获得商品快递费用

本帖只展示部分代码及接口 需了解更多或开发系统请移步注册测试 http://console.open.onebound.cn/console/?iRookie 测试请求地址: http://open.onebound.cn/test/? { “item”: { “num_iid”: “591734471276”, “location”: null, “area_id”: “2274”, “shipping_…...

搜索: DFS + 剪枝:木棒

题目链接&#xff1a;https://www.acwing.com/problem/content/169/ 题目&#xff1a; 乔治拿来一组等长的木棒&#xff0c;将它们随机地砍断&#xff0c;使得每一节木棍的长度都不超过 50 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态&#xff0c;但忘记了初始时有…...

160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&#…...

Prometheus rate和irate查询实现

rate 该函数用来计算某个指标在最近一个区间时间内的变化率。 比如说&#xff0c;Prometheus每15秒采集一次数据&#xff0c;当某个指标metric1的数据采集如下&#xff1a; timestampvalue15:00:001000015:00:151003015:00:301004515:00:4510090 假设当前时间为15:00:50&…...

OpenGl 基本函数 glDrawArrays 详解

本文章是转载&#xff1a;下面的几张图一目了然&#xff0c;很不多。 https://www.cnblogs.com/lxb0478/p/6381677.html glDrawArrays的功能&#xff1a;提供绘制功能&#xff0c;从数组数据中提取数据渲染基本图元。 定义 void glDrawArrays( GLenum mode, GLint first…...

清新简约教育培训汇报总结PPT-朴尔PPT

清新简约教育培训汇报总结PPT模板。一套,总结报告,工作汇报,幻灯片模板&#xff0c;内含黄色,红色多种配色&#xff0c;简约,小清新,卡通风风格设计&#xff0c;动态播放效果&#xff0c;精美实用。 希望下面这份精美的PPT模板能帮助到你 基本信息 用途&#xff1a;,总结报告…...

【AI视野·今日CV 计算机视觉论文速览 第220期】Wed, 16 Jun 2021

AI视野今日CS.CV 计算机视觉论文速览 Wed, 16 Jun 2021 Totally 76 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Is this Harmful? Learning to Predict Harmfulness Ratings from Video Authors Johan Edstedt, Johan Karlsson, Franci…...

导图解书-羁绊(06)《考试脑科学》

想要考试考出好成绩&#xff0c;一系列好的学习方法不可或缺。想要研究高效率的学习方法&#xff0c;首要之事是理解人脑规则。然后根据这些规则就去制定学习方法&#xff0c;尤其要注意 不要违背人脑规则&#xff0c;或者说去灵活运用人脑规则。而本书就是那个“人脑规则”。 …...

JAVA开发小技巧之----返回封装类

在也代码开发的过程中&#xff0c;我们一般都会封装一个对象&#xff0c;进行统一的返回给前端&#xff0c;常见的其中包含code, msg,data这些值。 之前常用的一个返回封装类: public class ResponseClass<T> {private String code;private String msg;private T data;…...

pytest的mark标记用例功能

用例标记&#xff0c;便于我们更好归类测试用例 pytest.mark.skip跳过此用例:使用跳过装饰器标记它&#xff0c;可以传递一个可选的原因pytest.mark.xxx标记用例为xxx # 执行的时候执行webtest的用例。pytest -v -m xxx # 执行的时候不执行webtest的用例。pytest -v -m not xx…...

遇到 “Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work. “ 怎么办?

网上找了一些教程都无法解决我的问题&#xff0c;如下简单办法即可完美解决 打开Anaconda prompt&#xff0c;输入以下代码 conda install -c anaconda pydot出现提示后&#xff0c;按’y’执行安装 参考文献 windows系统python中的pygraphviz模块如何顺利的安装&#xff1f…...

docker学习笔记(一)

概述 Docker是一款针对程序开发人员和系统管理员来开发、部署、运行应用的一款虚拟化平台。Docker 可以让你像使用集装箱一样快速的组合成应用&#xff0c;并且可以像运输标准集装箱一样&#xff0c;尽可能的屏蔽代码层面的差异。Docker 会尽可能的缩短从代码测试到产品部署的时…...

SpringBoot知识点总结

目录 1、SpringBoot简介及其优点 2、如何重新加载SpringBoot上的更改&#xff0c;而无需重新启动服务器&#xff1f; 3.SpringBoot中的监视器是什么以及如何监视 4.如何在SpringBoot中禁用Actuator端点安全性&#xff1f; 5.如何在自定义端口上运行SpringBoot应用程序&…...

大端小端存储二进制与字节的转换

大端小端二进制与字节的转换 单位换算 位&#xff1a;“位(bit)”是电子计算机中最小的数据单位。每一位的状态只能是0或1。 字节&#xff1a;8个二进制位构成1个“字节(Byte)”&#xff0c;它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字&#xff0c…...

vue websocket 连接 复制直接用

<script>export default {data() {return {websock: null,timer: "",startTime: "",endTime: "",}},created() {clearInterval(this.timer);this.timer setInterval(() > {this.initWebSocket();}, 1000);},destroyed() {this.websoc...

MySQL 高级(2): 索引的概念,分类,性能分析

索引优化分析 索引的概念 MySQL 官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL 高效获取数据的数据结构。 可以得到索引的本质&#xff1a;索引是数据结构。可以简单理解为排好序的快速查找数据结构。在数据之外&#xff0c;数据库系统还维护…...

2021暑假每日一题 【week2 完结】

目录3763. 数字矩阵 【难度: 一般 / 知识点: 思维】3764. 三元数异或 【难度: 一般 / 知识点: 思维 贪心】3767. 最小的值 【难度: 一般 / 思维: 贪心 枚举】3768. 字符串删减【难度: 简单 / 知识点: 模拟】3769. 移动石子 【难度: 简单 / 知识点: 贪心】3763. 数字矩阵 【难度…...

Web页面切图和CSS注意事项

Web页面切图和CSS注意事项 一、Web页面切图 1) Web页面的切图类型可以归纳为背景&#xff08;bg&#xff09;、列表项目的符号&#xff08;li&#xff09;、内容中插入的图片&#xff08;pic&#xff09;、按钮&#xff08;btn&#xff09;、图标等几种形式&#xff08;ico&…...

前端切图实战(PSD设计稿转化为前端)

课程来源&#xff1a;https://www.imooc.com/learn/668 一&#xff1a;读设计稿 划分&#xff1a;头部、尾部、公共部分、大概分多少块、logo的重用、列表有哪些、各部分用什么技术实现等等。 二&#xff1a;建立项目目录 三&#xff1a;编写重置样式 不同的标签有着默认的样式…...

学成在线实例

1. 学成在线页面制作 目标 理解 能够说写单页面我们基本的流程能说出常见的css初始化语句能说出我们CSS属性书写顺序 应用 能利用ps切图能引入外部样式表能把psd文件转换为html页面 学成在线的目的就是为了串联前面的所有知识。来一个春晚大联欢。 pink老师&#xff1a; …...

使用jmeter自动化证据切图后预览操作

1、背景 北知项目的证据交换系统&#xff0c;有一个证据上传查看功能用户使用较多&#xff0c;其中上传功能的后台处理逻辑复杂&#xff0c;内部进行了切图处理&#xff0c;以此来满足对于上传word类&#xff0c;PDF类的文件进行查看的需求。 2、分析 根据需求背景&#xff…...

html代码word,Web前端

课程主题HTML5基础、CSS3基础、切图、综合项目&#xff1a;小U课堂、HTML5进阶、 CSS3进阶、综合项目&#xff1a;小U商城、综合项目&#xff1a;响应式布局实战项目PC端项目&#xff1a;小U课堂静态页面布局、移动端项目&#xff1a;小U商城移动端项目、响应式项目&#xff1a…...

一个切图仔的 CSS 笔记

1&#xff0c;flexbox~注意&#xff0c;设为 Flex 布局以后&#xff0c;子元素的float、clear和vertical-align属性将失效。 在ios8上要加上前缀 display: -webkit-box; display: -webkit-flex; display: -webkit-box; /* Chrome 4, Safari 3.1, iOS Safari 3.2 */ display: …...

蓝桥杯嵌入式AT24C02

文章目录前言一、AT24C02原理图二、IIC通信协议三、代码编写1.拷贝官方驱动程序2.编写AT24C02读写函数1.查看AT24C02芯片手册确定AT24C02器件地址2.读函数编写3.写函数编写4.代码使用总结前言 本文将带大家了解IIC协议&#xff0c;并带大家编写AT24C02的驱动代码。 一、AT24C…...

学成在线案例

案例的全部图片和代码资源 资源在这&#xff08;0积分下载的&#xff09;&#xff1a;点击跳转 准备素材和工具 学成在线PSD源文件开发工具PS&#xff08;切图&#xff09;/cutterman插件vscode&#xff08;代码&#xff09;Chrome&#xff08;测试&#xff09;。 准备工作…...

百度OCR文字识别开发平台接口调试和切图

百度文字识别&#xff08;OCR&#xff09;开放平台接口调试 本篇不介绍OCR的基本概念和底层原理&#xff0c;专注于使用第三方识别接口 百度OCR的使用。学习笔记来源于项目需求前期&#xff0c;场景验证。现有的开放平台集成已经非常简单和便捷。 需求场景&#xff1a;识别wo…...

学成在线项目

1.典型的企业级网站 2.目的是为了整体感知企业级网站布局流程以及复习以前知识。 一、准备素材和工具 学成在线psd源文件开发工具PS&#xff08;切图&#xff09;/cutterman插件vscode&#xff08;代码&#xff09;chrome&#xff08;调试&#xff09; 二、案例准备工作 采…...

PS切图及H5基础

包括PS简单了解&#xff08;切图、抠图、测量大小等&#xff09;、HTML基础&#xff08;background基本属性、多行文字行高测量、文字/文本属性、测量空格大小、padding/margin、盒模型、超链接及伪类&#xff08;LVHA&#xff09;、H5其他标签(span/header/nav/footer/section…...

前端切图常用的代码

前言&#xff1a;我们不是代码的创造者&#xff0c;我们只是代码的搬运工。 <h1>文本标题<p>段落标签<br>强制换行标签 空格<hr>水平线标签<b>加粗<strong>加重语气的加粗标签<i>倾斜<em>加重语气<u>下划线<s>删除…...

web前端基础 html5+css3(七.PS切图与项目实战(学成在线))

1.PS切图 &#xff08;1&#xff09;图层切图 &#xff08;2&#xff09;切片切图 &#xff08;3&#xff09;PS插件切图&#xff08;cutterman&#xff09; 2.项目实战&#xff08;学成在线&#xff09; css属性的书写顺序 1.布局定位属性&#xff1a;display/position/vi…...

CSS第五天总结——PS切图、CSS属性书写顺序

1. PS 切图 1.1. 常见的图片格式 序号格式特点和常用的用途1jpgJPEG&#xff08;.JPG&#xff09;对色彩的信息保留较好&#xff0c;高清&#xff0c;颜色较多&#xff0c;我们产品类的图片 经常用jpg格式的2gifGIF格式最多只能储存256色&#xff0c;所以通常用来显示简单图形…...

基于 Word2Vec 和 SVM 的微博舆情情感演化分析 论文笔记

目录论文标题引言标题论文学术结构1、相关研究综述&#xff08;先前学者的研究&#xff09;2、研究方法3、基于 Word2Vec 和 SVM 的微博情感演化分析4、基于 Word2Vec 词相似度的舆情主体对象情感演化分析5、结论与展望&#xff08;摘自原文&#xff0c;原文讲得很好&#xff0…...

php怎么实现网页切图,CSS_网站页面切图与CSS注意事项,一、Web页面切图 1) Web页面的 - phpStudy...

网站页面切图与CSS注意事项一、Web页面切图1) Web页面的切图类型可以归纳为背景(bg)、列表项目的符号(li)、内容中插入的图片(pic)、按钮(btn)、图标等几种形式(ico)。2) 建议把用CSS背景加载的图片拼合成一张图片。这样可减少对服务器的请求。从而提升页面加载速度。3) 除页面…...

【CSS】笔记4-浮动、切图、学成在线

目录 一、浮动 1.传统网页三种布局 (1)标准流 &#xff08;2).浮动 &#xff08;3&#xff09;什么是浮动 ​编辑 &#xff08;4&#xff09;浮动的特性 (5)浮动元素经常和标准流父级搭配使用 二、常见网页布局 三、清除浮动 1.为什么要清除浮动? 2.清除浮动的本…...

移动端切图

作为一名刚接触移动端页面的前端人员&#xff0c;总会遇到很多问题&#xff0c;如为什么 head 那里要加 viewport meta&#xff0c;为什么背景图片要用 二倍图 等等。我相信也有很多人跟你说&#xff0c;加 viewport 是为了让页面不缩放&#xff0c;让页面在手机上能1&#xff…...

java 破解版 aspose-word 切图

网上找了好久的资料,发现aspose-word包可以用.支持 doc ,docx , et 可以转换PDF文档 官网API https://docs.aspose.com/display/wordsjava/Home 但是这个东西很耗内存,而且如果文档启用宏的话,进行切图会报错。这个没有处理。 还有切出来的每页图片内容跟源文档不一致,可能下一…...

修改ip地址的软件是真的嘛_如何修改手机ip地址

手机相对于电脑那个更加的好用&#xff0c;可能两种的使用需求不同&#xff0c;很多的方面无法进行比较&#xff0c;但是手机更方便携带&#xff0c;对于外出手机使用的可能会更多会&#xff0c;因此手机的代理ip出现&#xff0c;是因为除去电脑工作&#xff0c;使用手机工作的…...