canvas手机版如何裁剪图片形状 有没有免费的短网址工具?

[更新]
·
·
分类:互联网
2056 阅读

canvas手机版如何裁剪图片形状

有没有免费的短网址工具?

有没有免费的短网址工具?

我是@程序员小助手, 本文从技术角度,对短网址进行深度挖掘。
前言网上已经有产品,用着还不错。可是,作为程序员,从零开始造轮子,开发一个属于自己的短网址服务器,这想法amazing!
通过本文,读者可明白短网址的技术原理,以及通过Go语言实现一个短网址服务。
简明教程短网址为什么存在?
微博等产品的兴起,活跃了网上的社交圈内大多数用户。但是微博一般有140字限制,如果不转发,单纯评论文字,再加上一段网址,极有可能超过限制而被截断。
短网址应运而生,用较短的一个字符串,替换较长的一个字符串,从观感上讲,效果要友好的多。
从技术原理上说,短网址是一个hash表,用于映射两个字符串的对应关系。
使用键,找到对应的值,重定向进行访问,就完成了整个流程。
短网址算法短网址的一般结构,比如新浪的 SwuTjn,其中后端的一段6位字符串,就是用来唯一标记一条记录的ID。那么,使用什么算法,可以生成一条无重复的ID呢?
使用通用的做法,使用 0-9 A-Z a-z 一共62个字符,我们看使用hash键位数分别有多少种排列组合情况。
1位:pow(62,1) 62 种
2位:pow(62,2) 3844 种
3位:pow(62,3) 238328 种
4位:pow(62,4) 14776336 种
5位:pow(62,5) 916132832 种
6位:pow(62,6) 56800235584 种
一般情况下,6个字符,就足够使用了,共计568亿种可能。
还有一种情况是,用原网址字符串的MD5值,共计32位,然后通过切分为4段,分别按位与运算,并裁剪到30位。间隔5位选出该位的字符作为该段索引,共有6位。但是这种做法也有几率发生重复,也不直观。
因此本文使用第一种算法生成键ID。
工具准备分析短网址的特性,包含以下项目:
唯一性:键需要全局唯一时效性:键需要有过期时间目标网址唯一,如果重复,则自动返回既有的键。考虑到上述情形,我们使用redis存储这些对应关系。使用Gin框架作为路由和控制器,提供对外的API访问。
核心函数计算机中常见的2进制,8进制,10进制,16进制,我们此处需要使用62个字符,循环表示一个整数,那么可称之为62进制。
下面使用go语言实现这个函数,用于将任意的整数(uint64)转换为(0-9A-Za-z)的字符串。
需要注意,基础的方法,就是循环取余数,根据进制字典,索引相应的字符,然后将各个余数拼接出来,就是结果。
这个计算方法,与2进制,8进制,原理是相同的。
由于字典比较长,有62个键值对,我们仅列出一部分。
上述函数的转换结果,类似于 6489264001 75ai0p
功能规划下面是对于系统路由,创建短链接,以及使用短链接访问目标网址的方法。
1 - 规划路由
路由比较简单,一共2个,一个POST方法,生成短链接;一个是GET方法,访问短链接。
代码如下:
2 - 引入redis并初始化
为了方便演示,我们使用redis存储键值,并设置expire时间。我们使用go-redis提供的接口操作redis数据库。
下面是全局的
对象生成,和初始化函数。
这样做的好处是,我们全局都可以使用变量 rdb 调用方法操作redis键值。
3 - 实现POST路由方法:add
本函数用于接收form表单数据,生成一个全局唯一的 hash ,作为键,存入redis,设置值和过期时间。
代码如下:
本段我们使用了一个 getCounter 函数,这是设置在redis内的键,将其每次请求创建的时候,自增 1,可保证无重复。根据这个计数器,我们调用 helper的 DecToAny 方法,将其转化为62进制的字符串,作为全局唯一的 hash 值。
下图是 getCounter 的定义:
特别注意的是,helper包,就是我们在“核心函数”部分定义的函数。在主函数体内引用。
4 - 实现GET方法:visit
本函数主要用于使用上一节接口生成的短链接,进行访问,并自动重定向到目标网址。
代码如下:
对于不存在的短链接,或者redis获取失败,返回错误信息。
如果存在,使用 301 StatusMovedPermanently 状态码重定向到目标地址。
测试我们使用curl工具,测试上述两个接口。
首先,使用POST表单提交数据:
curl -s -X POST -d target -d expire600 http://localhost:9090/
上述方法,我们提交了两个参数,命中路由之后,会访问上一节第3条的add方法,并生成一个短链接网址。返回JSON格式数据如下:
{message:ok,short_url:http://localhost:9090/75ai0r,status:1}
其中,short_url 就是短网址。
接着,我们在使用curl访问这个链接,看是否发生重定向。截图如下:
可以看到,执行了301重定向,并给出了目标网址,与我们上述表单想要创建的地址一致。
最后,故障测试。访问一个不存在的hash,看是否排除异常信息。截图如下:
可以看到,执行了错误返回信息。
结语以上我们使用GO语言框架Gin实现了两个路由,并使用redis管理短链接。核心函数使用helper包管理,经过测试,实现了短网址的功能。
以上代码在本地测试通过,也可部署到线上服务器对外开发端口,提供服务,效果是一样的。
希望通过这个流程,使大家对于短网址的知识,有一些了解,并能根据自身的编程能力,创作出更好用的短网址服务。
Happy coding :-)
【本文由 @程序员小助手 发布,持续分享编程与程序员成长相关的内容,欢迎关注】

英语高考高频单词800个,哪个大佬有方便透露一下吗?

Aaccent 加重accurate 精确acquire 获得action 操作,运算adjust 调整ambient light 环境光angle 角度anti-aliased 平滑处理arbitrary 任意的arrange 排列arrow 箭头artistic 艺术的,美术的Bbalance 平衡bar 条,栏base 基准batch 批量,成批bevel 使成斜角,斜切bilinear 双线性插值bitmap 位图,点阵图blend 混合,调和blur 模糊bold 加粗border 边界,边框brightness 亮度brush 画笔,笔形build 建造,创立burn 焦化,烧黑button 按钮Ccache 快速存储器calculation 计算calibrate 校准,校验canvas 画布carve 镌刻cascade 层叠chalk 粉笔,作记号channel 通道,频道charcoal 炭笔画chrome 铬黄,铬合金classic 经典的click (单)击(鼠标)clipboard 剪贴版clone 复制cloud 云彩command 命令content 内容continue 连续的,持续的contour 轮廓线,周线contract 收缩,缩小contrast 反差,对比coordinate 协调,协作craquelue 裂纹crayon 蜡笔crop 剪裁crystallize 水晶curl 螺旋状物,卷曲的current 当前的cursor 光标,游标curve 曲线custom 自定义Ddarken 较黑的,使变黑daubs 涂抹define 定义design 设计destination 目标,对象difference 区别,差异diffuse 散乱扩散displace 转移distort 扭曲document 文档,文件dodge 加亮drop shadow 投影duotone 双色调duplicate 复制dust 灰尘,尘土Eedge 边界effect 效果作用embed 嵌入emboss 浮雕enlarge 放大equalize 平均化expand 扩充,扩展export 输出extrude 突出eyedropper 吸管Ffacet 刻面feather 晕开,羽化fill 填充flare 张开,闪耀flatten 变平fl