Typora+PicGo+阿里云OSS配置低成本图床

313 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

1. 前言

平时如果个人编写笔记,博客,一般会使用word或者Markdown格式,如果使用Markdown格式的话,图片都是保存在本地的,如果给别人分享文章,别人电脑上是无法查看图片的,体验非常不好;为了方便文章笔记分享,这篇文章介绍使用阿里云的OSS存储来存放作为 Typora的网络图片存储库(图床)。

之前码云、GitHub这些也可以当做图床,GitHub的仓库访问较慢体验不好,码云官网的公告里规定图片地址禁止外链,目前也行不通。最方便,安全,的就是采用OSS存储,目前七牛云的OSS存储是免费,也就是每个月有免费的容量和流量,但是需要绑定自己的域名,相对操作也不方便,还需要购买域名,备案。最直接的就采用阿里云OSS、或者腾讯云OSS才作为图床,价格很便宜的,8块钱一年,容量40G,每月还有5G的外网流量,也很安全,不担心图片地址出问题,一般每个月做笔记写文章绰绰有余了,下面就介绍整个配置流程。

2. Typora

Typora是一款比较好用、支持实时预览的 Markdown格式文本编辑器(后缀是.MD)。有 OS X、Windows、Linux三个平台的版本。

Markdown格式是用来编写结构化文档的一种纯文本格式,它使我们在双手不离开键盘的情况下,可以对文本进行一定程度的格式排版。 还可以设置图床,也就是网络图片存放地址,支持一键上传本地所有图片到指定的网络存储库。

官网下载地址: www.typora.io/

CSDN下载地址(这个版本是最后一个免费版0.xx): download.csdn.net/download/xi…

image-20220331135728415

3. 购买阿里云OSS存储

(1)注册阿里云账号并登录阿里云官网,开通OSS存储。

地址:www.aliyun.com/product/oss

image-20220330184317125

(2)开通后,这里就可以点击控制台了。

image-20220330184417668

(3)购买资源包

image-20220330184540663

(4)选择合适的资源包

资源包也不贵,40GB空间,5年 是40块钱。

image-20220330192146921

image-20220330192121435

(5)关于流量包

help.aliyun.com/document_de…

每月有5G的免费下行流量,一般文章的图片存储是够用了。

image-20220330194715821

4. 创建存储块

(1)创建Bucket

image-20220330202246856

(2)根据提示填写名称,配置。权限选择公共读。

image-20220330202400291

(3)鼠标点击右上角头像,选择AccessKey管理。

image-20220330202458279

(4)点击开始使用子账号

image-20220330202717996

(5)点击添加权限

image-20220330203030736

选择OSS存储权限即可。

image-20220330203555160

(6)创建AccessKey

点击账号进入页面内部。

image-20220330205204940

创建AccessKey,然后保存好信息。

image-20220330205226306

5. 配置PicGO

(1)打开PicGO,配置阿里云OSS存储的地址信息。

image-20220330205656376

(2)根据提示填写配置信息即可,然后选择默认图床,完成。

image-20220330205815470

(3)上传所有本地图片

image-20220330210238261

6. 演示使用。

下面就用编写一份LCD绘图代码,加上配图测试,编辑器的图床配置。

下面这份代码是用在单片机上,对LCD屏进行绘图编程,完成图形绘制,文字显示

/*
函数功能:显示一个指定大小的汉字
参    数:
					x,y :汉字的坐标
					font:取模数据
					size:字体大小尺寸
*/
void LcdShowFont(u16 x,u16 y,u8 *dzk,u8 size)
{
	u8 temp,t,t1;
	u16 x0=x;	
    u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数  
	    for(t=0;t<csize;t++)
	    {   												   
		    temp=dzk[t];                       
	     for(t1=0;t1<8;t1++)
			 {
					if(temp&0x80)LcdDrawPoint(x,y,0x0);
					else 
					{
						 LcdDrawPoint(x,y,0xffff);
					}
					temp<<=1;
					x++;
					if((x-x0)==size)
					{
						x=x0;
						y++;
						break;
					}
			}  		 
    }    
}


/*
函数功能:矩形颜色填充
参    数:(sx,sy),(ex,ey):矩形对角坐标
					color:要填充的颜色
*/
void LcdFill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{          
	u16 i,j;
	u16 xlen=0;
	xlen=ex-sx+1;	 
	for(i=sy;i<=ey;i++)
	{
		LcdSetCursor(sx,i);      				//设置光标位置 
		LcdWriteRAM_Prepare();     			//开始写入GRAM	  
		for(j=0;j<xlen;j++)LcdWriteData(color);	    
	}	 
} 


/*
函数功能:画直线
参    数:x1,y1:起点坐标
					x2,y2:终点坐标 
*/
void LcdDrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
{
	u16 t; 
	int xerr=0,yerr=0,delta_x,delta_y,distance; 
	int incx,incy,uRow,uCol; 
	delta_x=x2-x1; //计算坐标增量 
	delta_y=y2-y1; 
	uRow=x1; 
	uCol=y1; 
	if(delta_x>0)incx=1; //设置单步方向 
	else if(delta_x==0)incx=0;//垂直线 
	else {incx=-1;delta_x=-delta_x;} 
	if(delta_y>0)incy=1; 
	else if(delta_y==0)incy=0;//水平线 
	else{incy=-1;delta_y=-delta_y;} 
	if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴 
	else distance=delta_y; 
	for(t=0;t<=distance+1;t++ )//画线输出 
	{  
		LcdDrawPoint(uRow,uCol,color);//画点 
		xerr+=delta_x ; 
		yerr+=delta_y ; 
		if(xerr>distance) 
		{ 
			xerr-=distance; 
			uRow+=incx; 
		} 
		if(yerr>distance) 
		{ 
			yerr-=distance; 
			uCol+=incy; 
		} 
	}  
}  


/*
函数功能:任意角度画直线 
参    数:
					w  :线段的长度
					len:半径
					c  :颜色
					x,y:坐标
*/
#include <math.h>
void LcdDrawAngleLine(u32 x,u32 y,float du,u32 len,u32 w,u16 c)
{
  int i;
	int x0,y0;
	float k=du*(3.1415926535/180);	
	for(i=len-w;i<len;i++)
	{
	  x0=cos(k)*i;
		y0=sin(k)*i;
		LcdDrawPoint(x+x0,y+y0,c);
	}	
}


/*
函数功能:画矩形	
参    数:(x1,y1),(x2,y2):矩形的对角坐标
*/
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
{
	LcdDrawLine(x1,y1,x2,y1,color);
	LcdDrawLine(x1,y1,x1,y2,color);
	LcdDrawLine(x1,y2,x2,y2,color);
	LcdDrawLine(x2,y1,x2,y2,color);
}


/*
函数功能:在指定位置画一个指定大小的圆
参    数:
					(x,y):中心点
				  r    :半径
*/
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color)
{
	int a,b;
	int di;
	a=0;b=r;	  
	di=3-(r<<1);             //判断下个点位置的标志
	while(a<=b)
	{
		LcdDrawPoint(x0+a,y0-b,color);             //5
 		LcdDrawPoint(x0+b,y0-a,color);             //0           
		LcdDrawPoint(x0+b,y0+a,color);             //4               
		LcdDrawPoint(x0+a,y0+b,color);             //6 
		LcdDrawPoint(x0-a,y0+b,color);             //1       
 		LcdDrawPoint(x0-b,y0+a,color);             
		LcdDrawPoint(x0-a,y0-b,color);             //2             
		LcdDrawPoint(x0-b,y0-a,color);             //7     	         
		a++;  
		if(di<0)di +=4*a+6;	//Bresenham画圆算法   
		else
		{
			di+=10+4*(a-b);   
			b--;
		} 						    
	}
}


/*
函数功能:显示图片
参    数:(图片起始横坐标,图片起始纵坐标,图片横像素,图片纵像素,要显示的图片首地址)
*/
void LcdShowPicture(u32 x,u32 y,u32 x1,u32 x2,const unsigned char * p)
{ 
  u32 x0,y0;   
	for(y0=0;y0<x2;y0++)
	 { 
		 for(x0=0;x0<x1;x0++)
			{ 
				 LcdDrawPoint(x+x0,y+y0,(*p<<8)+*(p+1));  //图片取模方式-->高位在前
				//画点LCD的像素是16位的,所以需要将2个8位像素合成16位像素。
				 p+=2;
			}
	 }
}