图片 订阅
图片是指由图形、图像等构成的平面媒体。图片的格式很多,但总体上可以分为点阵图和矢量图两大类,我们常用BMP、JPG等格式都是点阵图形,而SWF、CDR、AI等格式的图形属于矢量图形。有形式的事物,我们看到的,是图画、照片、拓片等的统称。图是技术制图中的基础术语,指用点、线、符号、文字和数字等描绘事物几何特征、形态、位置及大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。 展开全文
图片是指由图形、图像等构成的平面媒体。图片的格式很多,但总体上可以分为点阵图和矢量图两大类,我们常用BMP、JPG等格式都是点阵图形,而SWF、CDR、AI等格式的图形属于矢量图形。有形式的事物,我们看到的,是图画、照片、拓片等的统称。图是技术制图中的基础术语,指用点、线、符号、文字和数字等描绘事物几何特征、形态、位置及大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。
信息
类    属
平面媒体
类    型
点阵图和矢量图
中文名
图片
外文名
Picture
图片词语概念
词典解释图:技术制图中的基础术语, 图片(80张) 指用点、线、符号、文字和数字等描绘事物几何特征、形态、位置及大小的一种形式(注意,是一种形式)。片:名词,又如:唱片、画片、相片、影片、片石(片状石料)、木片、玉兰片、虾片、名片、瓦片……(简述的是有形的一种事物)。
收起全文
精华内容
下载资源
问答
  • 图片
    万次阅读
    2021-06-30 15:25:22

    LaTeX插入图片时,常用的图片格式有:png, pdf, jpg, eps。以上四种图片格式各有优劣,其中最为显著的差异是清晰度和图片文件大小。在清晰度方面:eps是清晰度最高的,其次是pdf和png,最后是jpg。

    • 图片命名中不要出现中文字符、不要空格和其他特殊符号,建议只用英文字母、下划线和简单符号。
    • 若图片格式不是以上四种,或者图片中空白边缘过多,可以用PS进行处理并转存为以上四种格式之一。
    • 注意需要裁剪图片中多余空白部分

    0. 参数设置

    htbp 选项用来指定插图的理想位置,这几个字母分别代表 here, top, bottom, float page,也就是就这里、页顶、页尾、浮动页(专门放浮动体的单独页面或分栏)。\centering 用来使插图居中;\caption 命令设置插图标题,LaTeX 会自动给浮动体的标题加上编号。注意 \label 应该放在标题命令之后。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-POgch9ZO-1625037892836)(…/…/…/…/picture/image-20210630150535933.png)]

    .1. 位置

    • h 当前位置。 将图形放置在 正文文本中给出该图形环境的地方。如果本页所剩的页面不够, 这一参数将不起作用。
    • t 顶部。 将图形放置在页面的顶部。
    • b 底部。 将图形放置在页面的底部 16.1。
    • p 浮动页。 将图形放置在一只允许 有浮动对象的页面上。

    .2. 标题样式

    \usepackage[选项]{caption2}
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVdezq7o-1625037892837)(…/…/…/…/picture/image-20210630150744380.png)]

    • normal 标题文本两边对齐,其中最后一行为左对齐。
    • center 标题文本居中。
    • flushleft 标题文本左对齐。
    • flushright 标题文本右对齐。
    • centerlast 标题文本两边对齐,其中最后一行居中。
    • indent 与 normal 式样相似,只是标题文本从第二行开始, 每行行首缩进由命令 captionindent 给出的长度。因为 captionindent 的缺省值为零,通常用像 setlength{captionindent}{1cm} 这样的命令 来设置缩进值。
    • hang 与 normal 式样相似,只是标题文本从第二行开始, 每行行首缩进与标题标记宽度相等的长度。

    .3. 指令含义

    • \includegraphics命令,使用方括号[]传入一个表示图片宽度的参数,使用{}传入图像文件位置
    • \linewidth参数表示图片尺寸适应行宽,尺寸过小的图片将被拉伸,尺寸过大的图片将被压缩
    • 文件位置参数,如与.tex文件在同一目录下,则直接写明文件名,如在.tex所在目录的子目录下则写folder/file_name.png
    • \caption是出现在图片下方的描述信息
    • \label是不可见的,作为下次引用的标签

    1. 单张图片

    %导言区插入下面三行
    \usepackage{graphicx} %插入图片的宏包
    \usepackage{float} %设置图片浮动位置的宏包
    \usepackage{subfigure} %插入多图时用子图显示的宏包
    
    \begin{document}
    
    \begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
    \centering %图片居中
    \includegraphics[width=0.7\textwidth]{DV_demand} %插入图片,[]中设置图片大小,{}中是图片文件名
    \caption{Main name 2} %最终文档中希望显示的图片标题
    \label{Fig.main2} %用于文内引用的标签
    \end{figure}
    
    \end{document}
    

    2. 多图排版自定义编号

    %导言区插入下面三行
    \usepackage{graphicx}
    \usepackage{float} 
    \usepackage{subfigure}
    
    \begin{document}
    Figure \ref{Fig.main} has two sub figures, fig. \ref{Fig.sub.1} is the travel demand of driving auto, and fig. \ref{Fig.sub.2} is the travel demand of park-and-ride.
    
    \begin{figure}[H]
    \centering  %图片全局居中
    \subfigure[name1]{
    \label{Fig.sub.1}
    \includegraphics[width=0.45\textwidth]{DV_demand}}
    \subfigure[name2]{
    \label{Fig.sub.2}
    \includegraphics[width=0.45\textwidth]{P+R_demand}}
    \caption{Main name}
    \label{Fig.main}
    \end{figure}
    \end{document}
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ldhiscH-1625037892838)(…/…/…/…/picture/image-20210630145101730.png)]

    3. 多图横排+自定义编号

    %导言区的此三行无变化
    \usepackage{graphicx}
    \usepackage{float} 
    \usepackage{subfigure}
    %以下是新增的自定义格式更改
    \usepackage[]{caption2} %新增调用的宏包
    \renewcommand{\figurename}{Fig.} %重定义编号前缀词
    \renewcommand{\captionlabeldelim}{.~} %重定义分隔符
     %\roman是罗马数字编号,\alph是默认的字母编号,\arabic是阿拉伯数字编号,可按需替换下一行的相应位置
    \renewcommand{\thesubfigure}{(\roman{subfigure})}%此外,还可设置图编号显示格式,加括号或者不加括号
    \makeatletter \renewcommand{\@thesubfigure}{\thesubfigure \space}%子图编号与名称的间隔设置
    \renewcommand{\p@subfigure}{} \makeatother
    
    \begin{document}
    %注意:此段中在引用中增加了主图编号的引用
    Figure \ref{Fig.main} has two sub-figures, fig. \ref{Fig.main}\ref{Fig.sub.1} is the travel demand of driving auto, and fig. \ref{Fig.main}\ref{Fig.sub.2} is the travel demand of park-and-ride.
    %以下code与上一小结的无变化
    \begin{figure}[H]
    \centering  %图片全局居中
    \subfigure[name1]{
    \label{Fig.sub.1}
    \includegraphics[width=0.45\textwidth]{DV_demand}}
    \subfigure[name2]{
    \label{Fig.sub.2}
    \includegraphics[width=0.45\textwidth]{P+R_demand}}
    \caption{Main name}
    \label{Fig.main}
    \end{figure}
    
    \end{document}
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8KADxVYC-1625037892839)(…/…/…/…/picture/image-20210630145302450.png)]

    4. 多图并排显示非子图

    %导言区的此三行无变化
    \usepackage{graphicx}
    \usepackage{float} 
    %文章如果不涉及子图,以下代码可以删除,本文因需要一起示例排版,就保留了
    \usepackage{subfigure}
    \usepackage[]{caption2} %新增调用的宏包
    \renewcommand{\figurename}{Fig.} %重定义编号前缀词
    \renewcommand{\captionlabeldelim}{.~} %重定义分隔符
     %\roman是罗马数字编号,\alph是默认的字母编号,\arabic是阿拉伯数字编号,可按需替换下一行的相应位置
    \renewcommand{\thesubfigure}{(\roman{subfigure})}%此外,还可设置图编号显示格式,加括号或者不加括号
    \makeatletter \renewcommand{\@thesubfigure}{\thesubfigure \space}%子图编号与名称的间隔设置
    \renewcommand{\p@subfigure}{} \makeatother
    
    \begin{document}
    
    \begin{figure}[H]
    \centering %图片全局居中
    %并排几个图,就要写几个minipage
    \begin{minipage}[b]{0.45\textwidth} %所有minipage宽度之和要小于1,否则会自动变成竖排
    \centering %图片局部居中
    \includegraphics[width=0.8\textwidth]{DV_demand} %此时的图片宽度比例是相对于这个minipage的,不是全局
    \caption{name 1}
    \label{Fig.1}
    \end{minipage}
    \begin{minipage}[b]{0.45\textwidth} %所有minipage宽度之和要小于1,否则会自动变成竖排
    \centering %图片局部居中
    \includegraphics[width=0.8\textwidth]{P+R_demand}%此时的图片宽度比例是相对于这个minipage的,不是全局
    \caption{name 2}
    \label{Fig.2}
    \end{minipage}
    \end{figure}
    
    \end{document}
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-109UdagC-1625037892840)(…/…/…/…/picture/image-20210630145439643.png)]

    .5. 多排插入多张图片

    只需在并排插入图片的代码中加入换行即可

    \usepackage{graphicx}
    \usepackage{subfigure} %需要使用的宏包
    
    \begin{figure}
    \centering
    \subfigure[Jackson Yee]{\includegraphics[width=3.5cm]{Jackson.JPG}} 
    \subfigure[Jackson Yee]{\includegraphics[width=3.5cm]{Jackson.JPG}}
    \\ %换行
    \centering
    \subfigure[Jackson Yee]{\includegraphics[width=3.5cm]{Jackson.JPG}}
    \subfigure[Jackson Yee]{\includegraphics[width=3.5cm]{Jackson.JPG}}
    \caption{Jackson Yee} %图片标题
    \end{figure}
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkpzzU8b-1625037892841)(…/…/…/…/picture/image-20210630145812667.png)]

    .6. 垂直(竖向)插入多张图片

    \usepackage{graphicx}
    \usepackage{subfigure} %需要使用的宏包
    
    \begin{figure}
    \centering
    \subfigure[Jackson Yee]{
        \begin{minipage}[b]{0.23\linewidth} %0.23为minipage的宽度,可以调节子图间的距离
        \includegraphics[width=4cm]{Jackson.JPG}\vspace{1pt} %图片的宽度、路径和垂直间距
        \includegraphics[width=4cm]{Jackson.JPG}\vspace{1pt}
        %\vspace要紧跟在对应的includegraphics,不然得不到想要的结果
        \end{minipage}
    }
    \quad %退一格
    \qquad %退两格,调节子图间的距离
    \subfigure[Jackson Yee]{
        \begin{minipage}[b]{0.23\linewidth}
        \includegraphics[width=4cm]{Jackson.JPG}\vspace{1pt} 
        \includegraphics[width=4cm]{Jackson.JPG}\vspace{1pt}
        \end{minipage}
    }
    \caption{Jackson Yee}
    \end{figure}
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fei8TF19-1625037892842)(…/…/…/…/picture/image-20210630150112827.png)]

    .7. 问题

    .1. 标题图片不居中

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2hb4ygR-1625037892842)(…/…/…/…/picture/image-20210630151734030.png)]

    \documentclass[UTF8]{ctexart}
    \usepackage[margin=2cm]{geometry}
    \usepackage{mwe}
    \begin{document}
    
    \begin{figure}[htbp]
    \begin{minipage}[t]{0.4\textwidth}
    \centering
    \includegraphics[width=\linewidth]{example-image-a}
    \caption{时间间隔为12.5s时压强}
    \end{minipage}\hfill
    \begin{minipage}[t]{0.4\textwidth}
    \centering
    \includegraphics[width=\linewidth]{example-image-b}
    \caption{时间间隔为25.0s时压强}
    \end{minipage}
    \end{figure}
    \end{document}
    

    .2. 两张图片顶对齐

    可以使用 graphbox 宏包。它给 \includegraphics[]{} 增加了几个选项,其中就有控制纵向对齐的 align=t|c|b 选项。

    \documentclass{article}
    %\usepackage{graphicx}
    \usepackage{graphbox} % loads graphicx
    \usepackage{mwe}
    
    \begin{document}
    \newcommand{\test}[1]{%
      xx
      \includegraphics[height=3cm, #1]{example-image}
      \includegraphics[height=2cm, #1]{example-image}
      xx\par
    }
    
    \test{}
    \test{align=t}
    \test{align=c}
    \end{document}
    

    minipage内容的最前面加上 \vspace{0pt} 这样,\vspace{0pt} 就是 minipage内容的第一行,他们是零高度,图片自然就顶部对齐了。

    \documentclass{article}
    \usepackage{graphicx}
    \begin{document}
    \begin{minipage}[t]{0.45\linewidth}
      \vspace{0pt}
      \includegraphics[height=2cm]{example-image-a.pdf}
    \end{minipage}
    \begin{minipage}[t]{0.45\linewidth}
      \vspace{0pt}
      \includegraphics[height=4cm]{example-image-a.pdf}
    \end{minipage}
    \end{document}
    

    .3. 图片过宽

    这时,我们需要使用一个叫adjustbox的宏包。在导言区加上一句

    \usepackage[export]{adjustbox} 
    

    然后在正文中使用

    \begin{figure}[H]
    \centering
    \includegraphics[center]{pic.png}
    \end{figure}
    

    Resource

    • https://zhuanlan.zhihu.com/p/32925549
    • https://www.jianshu.com/p/d9df490e48b8
    更多相关内容
  • 图片管理系统_asp+access_相册_支持图片批量上传

    千次下载 热门讨论 2012-12-25 21:00:27
    采用ASP+ACCESS+DIV+CSS+AJAX开发,可配置在支持ASP环境...淘宝图片管理,企业图片管理,单位图片管理,公司图片管理 商品图片管理,产品图片管理 影楼相片管理,学校图片管理,班级图片管理 摄影作品管理,设计图片管理
  • C# 给图片加上文字或图片水印

    千次下载 热门讨论 2014-08-06 02:02:33
    C# 给图片加上文字或图片水印,通过使用GDI+ 给图片上加水印。实现了透明文字与透明图片水印。可设置水印位置。
  • 图片怎么存储到数据库里

    万次阅读 多人点赞 2020-12-24 12:07:26
    我们存储图片到数据库里一般有两种方式 将图片保存的路径存储到数据库(文件路径或者ftp路径) 将图片以二进制数据流的形式直接写入数据库字段中(base64) FTP:FTP服务器(File Transfer Protocol Server)...

    存储图片到数据库里一般有两种方式

    • 将图片保存的路径存储到数据库(文件存放在服务器的路径或者ftp服务器的路径)
    • 将图片以二进制数据流的形式直接写入数据库字段中(base64的形式),base64

    图片在数据库的存储用途一般为

    • 用户上传的头像,文章插图,文章首页图片等等
    • 其他方面的图片

    一般存储图片有两种做法:

    1. 把图片直接以二进制形式存储在数据库中,一般数据库提供一个二进制字段来存储二进制数据。比如mysql中有个blob字段。oracle数据库中是blob或bfile类型
    2. 图片存储在磁盘上(服务器上),数据库字段中保存的是图片在服务器上存储的路径。

    将图片转换成二进制存储:

    大体思路:

    1. 将读取到的图片用自己的程序转化成二进制形式。(一般会有内置函数,可以快速转出为base64格式),Nodejs的话可以这样转化
    2. 再结合insert into语句插入数据表中的blob类型字段中去。
    3. 从数据库取出图片展示的时候。则是直接发送图片内容
    4. 然后前端接收到二进制,展示到需要的位置即可

    总结:处理代码不是很麻烦,使用nodejs很容易就可以处理。但是,我们用得更多的是存储图片的路径,实际图片是在磁盘上保存的(图片二进制放到数据库,把数据库的负担弄重了)。需要代码的话,可以看我nodejs里面对图片的处理。

    互联网环境中,大访问量,数据库速度和性能方面很重要。一般在数据库存储图片的做法比较少,更多的是将图片路径存储在数据库中,展示图片的时候只需要连接磁盘路径把图片载入进来即可。因为图片是属于大字段。一张图片要占用1M甚至几十M,所以使用数据库很浪费资源,但是如果图片量很小的情况下可以尝试,或者直接在后台开辟空间存储文件(这样也给服务器造成了不小的压力),所以最好还是使用第三方文件上传平台,像七牛云,阿里云,腾讯云等等(坐等打钱)。

    牵扯到一些基本的数据库调优,比如这篇文章分为标题、作者、添加时间、更新时间、文章内容、文章关键字等等。

    文章内容一般是比较长的。经常使用text字段去存储。文章的内容就属于大字段。一般文章内容可以拆分到单独一个表中去。不要与文章信息存储在一张表里面。

    个人的理解:mysql中一张表的数据是全部在一个数据文件中的。如果大字段的数据也存储在里面。程序展示列表,比如文章列表。这个时候根本不需要展示文章内容的。但是仍然会影响速度,数据库查找数据其实就是扫描那个数据文件,文件容量越小,速度就会越快(为什么单表的容量在1g-2g的时候基本上要分表了)。拆分出去到一张单独的表,就是单独的文件了。举一反三,相互独立,分离的思想不仅在系统开发中用到,在现实生活中经常存在的。

    总结:三种东西永远不要放到数据库里,图片,文件,二进制数据。

    原因

    • 对数据库的读/写的速度永远都赶不上文件系统处理的速度
    • 数据库备份变的巨大,越来越耗时间
    • 对文件的访问需要穿越你的应用层和数据库层
    • 把图片缩略图存到数据库里?很好,那你就不能使用nginx或其它类型的轻量级服务器来处理它们了。

    关于mysql中的blob类型

    bolb(binary large object)二进制大对像就像int型那样,分为blobMEDIUMBLOBLONGBLOB。其实就是从小到大

    • blob 容量为64KB
    • MEDIUMBLOB 容量为16M
    • LONGBLOB 容量为4G。

    说实话,图片用这样子存储用得还真少。使用java的序列化函数进行序列化的值,有人存入这个字段中去。

    mysql中blob字段存储图片有个通信大小的设置:

    图片要传输给mysql存储起来,那么需要涉及到数据通信。mysql中有个配置是限制通信数据大小的。

    my.conf配置文件中的max_allowed_packet,mysql默认的值是1M。

    好多图片尤其是原始图可能不止1m。传输的数据(也就是图片)超过这个设置大小。结果就会出错

    其实所谓的性能,最关键是数据库性能。因为随着数据库数据量增大,大部分时间耗费是在php,java等语言等待数据库返回数据的过程中耗费时间。

    网站访问量大了后,具体的语言不是瓶颈,瓶颈都在数据库。用c,python,php,java 都能操作mysql数据库获取数据。语言之间可能存在速度执行差异,但是其实这种差别已经很小了。至少我觉得,给予用户感觉不到明显。执行相差0.0001秒用户感觉并没有明显的区别。可能说,大并发(很多用户同时访问)的时候,就会体现到差别了。其实我觉得,大并发访问是数据库瓶颈。等待数据库给予数据。没达到一定级别实在体现不了差别。数据库数据量达到一定级别。语言相差0.001s会给予用户体验上的差别。所以,这也是为什么php很适合做web开发了。解析页面速度快(解释型语言,不需要编译)。可以用java来与数据库打交道获取数据。php不直接操作数据库,而是调用java提供的数据接口,获取数据,马上展示在页面中。这是利用了php的页面执行速度快的一个优势。

    二、数据库中保存图片路径

    一般是这样子的:

    按照年月日生成路径。具体是按照年月日还是按照年月去生成路径,根据自己需要(不一定是按照日期去生成)。

    理解为什么要分散到多个文件夹中去才是关键,涉及到一个原理就明白了:

    1. 操作系统对单个目录的文件数量是有限制的。当文件数量很多的时候。从目录中获取文件的速度就会越来越慢。所以为了保持速度,才要按照固定规则去分散到多个目录中去。
    2. 图片分散到磁盘路径中去。数据库字段中保存的是类似于这样子的”images/2012/09/25/ 1343287394783.jpg”
    3. 原来上传的图片文件名称会重新命名保存,比如按照时间戳来生成,1343287394783. jpg。这样子是为了避免文件名重复,多个人往同一个目录上传图片的时候会出现。
    4. 反正用什么样的规则命名图片,只要做到图片名称的唯一性即可。
    5. 比如网站的并发访问量大,目录的生成分得月细越好。比如精确到小时,一个小时都可以是一个文件夹。同时0.001秒有两个用户同时在上传图片(因为那么就会往同一个小时文件夹里面存图片)。因为时间戳是精确到秒的。为了做到图片名称唯一性而不至于覆盖,生成可以在在时间戳后面继续加毫秒微秒等。总结的规律是,并发访问量越大。就越精确就好了。

    有个方面总结一下:为什么保存的磁盘路径,是”images/2012/09/25/1343287394783.jpg”,而不是” /images/2012/09/25/ 1343287394783.jpg”(最前面带有斜杠)?

    1. 连那个斜杠都不要。这里也是做到方便以后系统扩展。
    2. 在页面中需要取出图片路径展示图片的时候,如果是相对路径,则可以使用”./”+”images/2012/09/25/1343287394783.jpg”进行组装。
    3. 如果需要单独的域名(比如做cdn加速的时候)域名,img1.xxx.com,img2.xxx.com这样的域名
    4. 直接组装 “http://img1.xxx.com/”+”images/2012/09/25/1343287394783.jpg”
    5. 当然数据库是可以在前面加斜杠/保存起来,/images/2012/09/25/ 1343287394783.jpg
    6. 其实不方便统一。比如相对路径载入图片的时候,则是”.”+” /images/2012/09/25/ 1343287394783.jpg”
    7. 可能我还没体会到坏处,以后会遇到问题的。不过,遵循惯例不加斜杠” images/2012/09/25/ 1343287394783.jpg”就对了。

    涉及到一个新问题:为什么大部分系统都不会域名保存进去,像这样子http://www.xxx.com/images/2012/09/25/1343287394783.jpg保存到数据库中

    1. 了解的知识越多,越有利于我们做决定。可能就是一个”感觉区别不是很大”的影响下,去做一个决定,反而对后面是比较大的影响的。至少是增加自己的工作量了。
    2. 其实把域名保存进去,也不是什么滔天大罪的事情。但凡是经验丰富的开发人员都不会这样子做。这是一个经验积累出来的,所以上海那个网友也对此并没有明显的概念很正常,他说他不知道cdn方面的(当然觉得存个域名进去没什么大不了的)。需要了解cdn知识,什么情况下会用到cdn知识。
    3. 虽然是做开发人员,不需要关注运维和服务器之类的知识。不过了解一些就有利于理解了。
    4. 这里涉及到cdn加速。关于cdn原理(就是内容分发网络),我理解其本质就是为了解决距离远产生的速度问题,使用就近的服务。

    CDN

    1. 从中国请求美国一台服务器上的图片。一般比较慢,因为距离这么远,网络传输是存在损耗的,距离越远,传输的时间就越长。一般会看到浏览器左下角显示:“已响应,正在传输数据…”。这不是服务器本身问题了。实际上服务器早就响应请求,把数据发给客户端,但是网络问题,就一直在传输,没传完了。
    2. 在中国,是南北距离远的问题。南北还会涉及到跨网,南方用户使用电信居多,北方用户网通居多。两个线路需要跨越,会有时间延迟。
    3. cdn加速就是适应这个需求产生的:现在不请求美国的服务器。直接在中国安放节点(节点是比较笼统的词语,可以理解成一台服务器,也可以理解成一个机房,就是一个点嘛),请求距离近的节点。这样子就不需要那么远的距离了。

    以前在长沙的网站,团购以城市分站的形式。北京和长沙用的是同一套程序。服务器在长沙。北京用户访问北京站的时候,实际上需要远距离访问长沙的服务器。速度怎么都快不起来。跟服务器性能完全没关系。当时不懂这些。不清楚怎么折腾。就想办法去做js代码压缩,浏览器缓存之类的。实际上瞎折腾。不是说这些前端优化不重要,哲学上有主次矛盾之分,瓶颈在哪里就去突破哪里。没解决主要矛盾,问题并不会迎刃而解。当时也不是数据库瓶颈。如果去优化数据库。也不会明显改善。就那点数据量。根本就达不到瓶颈。哪里谈得上主要矛盾。随着后来去其他公司工作,接触一些东西,类似不找瓶颈的优化例子发生在身边好几次了,先没找到瓶颈就瞎去优化。我的同事可能是抱着多多益善的心态去做的,但主要矛盾(技术上说是瓶颈)没找到,也没改善。

    当时如果没想到是距离问题。也就不会想到cdn,当时其实我根本不知道cdn服务。我只知道,google这些网站肯定在中国部署的服务器,要不然,中国用户还去访问美国的服务器,那再好的服务器都会速度慢的。

    由于自己搭建cdn环境和机房的资金比较大(需要大量的服务器),也需要人力维护。反正一般的公司弄不起,其实根本不划算。淘宝以前用商用的cdn服务,后来商用的扛不住了,就搭建了自己的cdn网。我不知道新浪有没有自己搭建,但其实我觉得跟淘宝的特点有关,店铺很多,无论是商品还是交易记录总计起来商品很多的图片,图片都是静态的部分,cdn本来就是用来做静态的(图片,css,js等)请求分发用的。

    之前在网上看到一句话,cdn网络不是一般的公司玩得起的。

    一般的公司自己搭建cdn网络成本高,所以就有商业的cdn提供付费租用服务,这是一项很成熟的业务,很多这样的公司,大部分全国性的互联网公司都会使用到cdn。

    总结:cdn服务。对于静态内容是非常适合的。所以像商品图片,随着访问量大了后,租用cdn服务,只需要把图片上传到他们的服务器上去。

    例子:北京访问长沙服务器,距离太远。我们完全可以把商品图片,放到北京的云服务(我们觉得现在提供给网站使用的云存储其实就是cdn,给网站提供分流和就近访问)上去。这样子北京用户访问的时候,实际上图片就是就近获取。不需要很长距离的传输。

    自己用一个域名img.xxx.com来载入图片。这个域名解析到北京的云服务上去。

    做法:数据库中保存的是” images/2012/09/25/1343287394783.jpg”,

    这些图片实际上不存储在web服务器上。上传到北京的cdn服务器上去。

    我从数据库取出来,直接”img.xxx.com/”+” images/2012/09/25/1343287394783.jpg”

    比如如果还有多个,就命名img1.xx.com、img2.xx.com

    反正可以随便。所以如果把域名直接保存进去。就显得很麻烦了。迁移麻烦。

    像淘宝,凡客,亚马逊这些电子商务网站,我们看到请求的时候,下面往往会有

    img1.xxx.cdn.com

    img2.xxx.cdn.com

    其实他们保存在数据库中的是相对路径。有些是不需要在数据库保存的,缩略图可以实时访问的时候用程序生成(节省很多存储空间)

    实际上,把域名保存在数据库中,非常不利于系统迁移。一旦换个域名的话,原来保存在数据库中的是“www.abc.om/images/xxxxxx“,因为路径都在数据库中写死了。下回换个域名就用不了了。那个时候自己去写sql语句批量更新字段吧。

    几个术语:

    • ICP(Internet Content Provider),也就是网络内容提供者。联想到我们运营一个网站需要icp备案了吗?你自己运营网站,你就是icp服务商
    • IDC(Internet Data Center),互联网数据中心。IDC的概念,目前还没有一个统一的标准。通俗点,就是提供机房托管(服务器租用和托管),域名注册之类的。

    关于淘宝的图片存储

    了解到:淘宝以前使用了商用的存储。但是没法满足需求。据说,到2010年,淘宝网后端保存着286亿张图片。商用的系统系统没法满足需求的时候。他们就自己开发了一个tfs(Taobao File System)。大规模的小文件在磁盘上读取,需要磁盘磁头频繁的寻道和换道。大并发情况下和大量的操作确实很麻烦。其实借鉴了当时google公布的gfs(Google File System)设计论文。google有相册服务。为每个用户提供上传图片存储。

    有个观点比较好:对于老板们而言,往往觉得,用钱能解决的都不算问题。但问题在于,你遇到的问题,别人都没遇到过。那这个时候你就没有经验可以参考或者直接拿来使用。只有自己参考一些思路去创造技术了。

    三、关于图片进行云存储(cdn加速)

    曾经看过这个,这个是比较适合创业公司的。价格相对便宜https://www.upyun.com/

    其实,现在的云存储本质就是一个cdn服务商。你把静态的图片上传到他提供的服务器上去(ftp方式上传或者api形式编写程序上传)。他为你做就近节点访问。

    计费方式:按照流量付费,99元购买100g。怎么算流量。每次访问文件的大小累加,比如一个1m的文件,访问一次流量就加1m。

    我个人理解,对于图片的量不大的情况下,使用这种云服务,好处不是节省存储空间。你自己的服务器100g的空间可能创业型公司都没用完,不是什么存储空间不够用,然后去用云存储。以前我对cdn比较模糊,有这么点理解,或者以为是分散网站web服务器流压力,服务器分流。这些好处是有的。但是,只要理解了cdn产生的背景和解决的关键问题后,就会明白云存储关键好处在于:给用户就近节点访问,加速。

    我觉得,如果不是出于这个考虑,或者达不到这样的目的。用其他方案也完全可以替代。何必使用云存储呢?就是你无非有实力做到全国多个节点去部署服务,才需要租用cdn来帮你,毕竟他们是规模产生的效益,专注于解决这个领域。

    使用腾讯云、阿里云、华为云不香吗?

    下面是具体存储方法代码:

      一、保存图片的上传路径到数据库:
      string uppath="";//用于保存图片上传路径
      //获取上传图片的文件名
      string fileFullname = this.FileUpload1.FileName;
      //获取图片上传的时间,以时间作为图片的名字可以防止图片重名
      string dataName = DateTime.Now.ToString("yyyyMMddhhmmss");
      //获取图片的文件名(不含扩展名)
      string fileName = fileFullname.Substring(fileFullname.LastIndexOf("\\") + 1);
      //获取图片扩展名
      string type = fileFullname.Substring(fileFullname.LastIndexOf(".") + 1);
      //判断是否为要求的格式
      if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF")
      {
       //将图片上传到指定路径的文件夹
       this.FileUpload1.SaveAs(Server.MapPath("~/upload") + "\\" + dataName + "." + type);
       //将路径保存到变量,将该变量的值保存到数据库相应字段即可
       uppath = "~/upload/" + dataName + "." + type;
      }
      二、将图片以二进制数据流直接保存到数据库:
      引用如下命名空间:
      using System.Drawing;
      using System.IO;
      using System.Data.SqlClient;
      设计数据库时,表中相应的字段类型为iamge
      保存:
      //图片路径
      string strPath = this.FileUpload1.PostedFile.FileName.ToString ();
      //读取图片
      FileStream fs = new System.IO.FileStream(strPath, FileMode.Open, FileAccess.Read);
      BinaryReader br = new BinaryReader(fs);
      byte[] photo = br.ReadBytes((int)fs.Length);
      br.Close();
      fs.Close();
      //存入
      SqlConnection myConn = new SqlConnection("Data Source=.;Initial Catalog=stumanage;User ID=sa;Password=123");
      string strComm = " INSERT INTO stuInfo(stuid,stuimage) VALUES(107,@photoBinary )";//操作数据库语句根据需要修改
      SqlCommand myComm = new SqlCommand(strComm, myConn);
      myComm.Parameters.Add("@photoBinary", SqlDbType.Binary, photo.Length);
      myComm.Parameters["@photoBinary"].Value = photo;
      myConn.Open();
      if (myComm.ExecuteNonQuery() > 0)
      {
       this.Label1.Text = "ok";
      }
      myConn.Close();
      读取:
      ...连接数据库字符串省略
      mycon.Open();
      SqlCommand command = new
      SqlCommand("select stuimage from stuInfo where stuid=107", mycon);//查询语句根据需要修改
      byte[] image = (byte[])command.ExecuteScalar ();
      //指定从数据库读取出来的图片的保存路径及名字
      string strPath = "~/Upload/zhangsan.JPG";
      string strPhotoPath = Server.MapPath(strPath);
      //按上面的路径与名字保存图片文件
      BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate));
      bw.Write(image);
      bw.Close();
      //显示图片
      this.Image1.ImageUrl = strPath;
      采用这两种方式可以根据实际需求灵活选择。
    
    展开全文
  • Android仿微信朋友圈选择多张图片Demo

    千次下载 热门讨论 2014-10-10 10:22:32
    类似微信发朋友圈时的添加图片,方式包括从相册选择多张图片,拍照;添加后可点击放大浏览或者删除,展示图片经过适当的压缩。 主要由4个Activity组成,发送前展示页,放大浏览页,选择相册页,选择图片
  • WEB前端大图片压缩并上传例子

    千次下载 热门讨论 2014-12-01 15:47:39
    手机上传图片到服务器时,如果是大文件图片肯定会很慢而且费流量,用户体验不好。本人用html5的canvas解决了这个问题,好东西一定要分享
  • hammer.js移动端图片手指缩放插件

    千次下载 热门讨论 2015-07-22 22:58:30
    手机移动端手指缩放图片的插件hammer.js
  • 史上最简单Android图片轮播效果实现 源码程序

    千次下载 热门讨论 2015-08-28 12:07:00
    这个Android示例用最简单的方式实现了图片轮播效果,具体实现细节请阅读博文:http://blog.csdn.net/l1028386804/article/details/48049913
  • 从plist和png图片中分离小图片工具--CutPNG

    千次下载 热门讨论 2014-10-14 23:27:55
    上边的是作者的源下载地址,我在使作者的这个工具时发现我从网上下载到的有plist的png图片在publish的时候,会出现程序崩溃的现象,所以我下载了作者放在https://github.com/qw2552479/CutPlistToSinglePng上的源码...
  • input file上传图片预览

    热门讨论 2015-12-30 12:57:12
    input file上传图片预览
  • Typora使用技巧之插入图片图片上传

    万次阅读 多人点赞 2021-01-17 16:20:10
    文章目录如何在 Typora 中插入图片直接写 Markdown拖拽图片从剪贴板中粘贴图片插入图片时做的动作上传图片配置图片上传服务iPicuPicPicGo-Core(命令行应用)安装预编译好的 PicGo-Core 二进制程序通过 Node.js 包...


    阅读本文的前置条件:

    • 掌握基本的 Markdown 语法
    • 用过 Typora,或者至少知道 Typora 是干嘛用的

    如何在 Typora 中插入图片

    在 Typora 中插入图片可以通过下面这几种方式

    直接写 Markdown

    在 Markdown 中,插入图片的语法是:![alt](src)src既可以是本地图片的绝对/相对路径,比如../images/test.png,也可以是 URL,比如:https://octodex.github.com/images/yaktocat.pngalt是图片的注释,可以为空。

    如果你不想手动敲 Markdown 语法,也可以让 Typora 帮你自动生成。

    macOS 用户可以在菜单栏中选择「格式」→「图像」→「插入图片」或者直接按快捷键「⌃⌘I」(macOS)、「Ctrl+Shift+I」(Windows)、「Ctrl+Shift+I」(Linux)。

    出现如下图所示的提示之后,输入图片的本地路径或者 URL 就可以插入图片了。如果不知道本地图片的路径,也可以点击右侧的那个文件夹按钮,通过图形化界面手动选择本地图片。

    插入本地图片还有一种方式,就是在菜单栏中选择「格式」→「图像」→「插入本地图片…」。

    拖拽图片

    将图片拖拽到 Typora 中也可以达到插入图片的目的,一次可以拖拽多个图片。

    从剪贴板中粘贴图片

    Typora 支持从剪贴板中粘贴图片,但是因为 Markdown 文件是纯文本文件,所以用户无法在 Markdown 文件中直接插入图片文件,而是通过在 Markdown 文件中引用文件路径或者 URL 的方式插入图片,所以默认情况下,Typora 会先将文件保存到一个固定的目录,具体什么目录跟操作系统有关。

    在 macOS 上,是保存到~/Library/Application Support/typora-user-images/目录下

    在 Windows 上,是保存到~\AppData\Roaming\Typora\typora-user-images\目录下

    你也可以告诉 Typora,粘贴后的图片要放到什么位置。具体怎么告诉,我们会在下一节「插入图片时做的动作」中介绍。

    Typora 会将图片拷贝到指定的文件夹或者服务器,然后通过引用保存的图片的路径或者 URL 来插入图片。

    小贴士:

    1. 在 macOS 上,你可以在访达中复制图片文件,然后在 Typora 中进行粘贴,这和拖拽文件的效果是一样的。
    2. 在 macOS 上,你可以从 iPhone 中复制图片,然后在 Typora 中进行粘贴,但是要先设置粘贴后的图片存放的位置。

    插入图片时做的动作

    打开 Typora 的偏好设置窗口,点击左侧的「图像」选项卡,在「插入图片时…」下面有一个下拉框,里面有这样几个选项,如下图所示。

    第一个选项「无特殊操作」是默认选项。

    第二个选项「复制图片到当前文件夹(./)」意思是你在插入图片时,将图片复制到你正在编辑的 Markdown 文件所在的目录下。

    第三个选项「复制图片到 ./ f i l e n a m e . a s s e t s 文 件 夹 」 意 思 是 , 在 你 插 入 图 片 时 , 会 在 当 前 目 录 下 创 建 一 个 名 为 ‘ {filename}.assets 文件夹」意思是,在你插入图片时,会在当前目录下创建一个名为` filename.assets{filename}.asset的文件夹,然后把图片保存在这个文件夹下,其中${filename}`指的是当前你正在编辑的 Markdown 文件的文件名。

    第四个选项「上传图片」就是在你插入图片时,使用图片上传服务将图片上传到服务器。这个具体的设置请参考下一节「上传图片」。

    第五个选项「复制到指定路径」,意思很明白,就不再解释。当你选择这个选项后,会出现一个输入框让你输入保存图片的路径,这里也可以使用${filename}来指代当前编辑的 Markdown 文件的文件名。也可以点击右边的文件夹按钮在弹出的对话框中选择一个路径。

    我的配置一般是这样:

    因为如果你在 Markdown 文件中使用了图片,那说明这张图片和你写的东西是有关联的,那最好把图片和 Markdown 文件放在一起,这样也便于以后查找。还要注意的是,如果你选择了「复制图片到当前文件夹(./)」,那么要把下面的「优先使用相对路径」选项勾选上,这样,Typora 在引用图片时就会使用相对路径,以后即使你移动 Markdown 文件到别的目录下,只要图片随着 Markdown 文件一起移动, Typora 就永远都能找到这张图片。再配合接下来要讲的「上传图片」,就能使 Markdown 文件的维护成本最小化。

    上传图片

    当你在 Typora 中插入本地图片时,前面提到的插入图片的语法![alt](src)中的src部分在 Markdown 中是以本地路径的方式保存的,如果你要把你的 Markdown 文件分享给别人,或者发布到网上,那么要把图片一起分享或者发布,这样就比较麻烦。而如果src是 URL 的话,你在分享的时候只要分享一个 Markdown 文件就可以了,只要能联网,Markdown 的渲染引擎就能根据 URL 找到你引用的图片。

    要想把本地的图片路径转换成 URL,就得把图片上传到网络上某个位置,然后拿到这个图片的 URL。使用「Typora + 第三方图片上传服务」就可以自动完成这一操作。

    之前我在 CSDN 上发布文章时,一般都是现在本地用 Typora 编辑好,然后复制到 CSDN 上,但是文章中的图片没法直接复制,只能再一张张地上传,如果你要把文章发布到多个平台,那这样的工作还要重复好几次,这对于一个程序员来说简直难以忍受。

    自从我用了 Typora 的上传图片的功能后,就像找到了救星一般,写文章的意愿比以前更大了。下面就介绍一下这个功能怎么用。

    ⚠️警告:

    在介绍上传图片的功能之前,你需要了解的是,Typora 是通过调用第三方的软件实现图片上传的,它本身并不会上传图片,提供存储图片服务的也是第三方的云存储服务,它们 并不属于 Typora。所以你在使用上传图片功能的时候,要注意这些第三方服务的许可证书、用户协议、服务稳定性以及可靠性。

    当你在偏好设置中开启上传图片的功能后,Typora 会将要上传的图片发送给第三方图片上传软件,然后他们会把你的图片上传到第三方(甚至是第四方)图床,Typora 不会控制这个过程,也无法保证这个过程的顺利,所以一定要选择一个可靠的服务来保证数据的安全。

    除了隐私和可靠性问题,你还需注意,有些服务在保存图片时可能会设置过期时间;有些服务没有提供「删除」的功能,即使你不小心上传了敏感图片;有些服务遵守的不是你所在国家的法律,可能会封禁一些特定国家的特定类型的图片或者用户等等。

    总而言之,在选择某个图片上传应用及服务之前,一定要仔细阅读他们的用户手册。

    配置

    在偏好设置面板中可以开启并配置图片上传服务,Typora 支持以下图片上传服务:

    • iPic (macOS,免费增值)
    • uPic (macOS,开源)
    • PicGo.app (macOS / Windows / Linux, 只有简体中文版)
    • PicGo (命令行应用) (Windows / Linux)
    • 自定义 (macOS / Windows / Linux)

    在选择了其中一个上传服务后,你需要下载并安装相应的应用,做一些简单的配置,比如你想使用哪个云存储服务来保存上传的图片,然后点击「验证图片上传选项」,验证 Typora 使用当前服务和配置是否能上传本地图片。

    点击「验证图片上传选项」按钮后,Typora 会尝试使用当前服务和配置上传图片,如果出现「验证成功」的对话框,说明图片上传服务可以用了。如果显示的是「验证失败」的对话框,有可能是你电脑上还没有安装相应的服务或者网络问题,可以根据对话框中的提示进行检查。

    图片上传服务

    iPic

    iPic 仅支持 macOS,可以在 APP Store 中下载,是一款免费增值的应用,所谓免费增值,就是基础功能是免费的,如果想使用它的高级功能,就要收费了。好消息是,对于大多数用户而言,基础功能就够用了。在国内使用的话,iPic 默认是将图片上传至微博图床,此外,iPic 还支持其他图床,包括腾讯云、阿里云、七牛、又拍、Imgur、Flickr、Amazon S3,但是添加这些图床属于收费功能。

    图片上传后会返回 URL,这个 URL 没有权限控制,任何人都可以访问。

    iPic 详细的使用文档:

    uPic

    uPic 也是只能在 macOS 上使用,是一款开源、强大、美观且操作简单的图片即文件上传工具,可以在命令行中通过 Homebrew 安装:

    brew cask install upic
    

    或者从 GitHub 上下载:https://github.com/gee1k/uPic/releases

    uPic 的详细使用文档:https://blog.svend.cc/upic/en/

    关于 uPic 的具体使用,值得用一篇文章来详细介绍,由于篇幅限制,这里就不赘述了,如果读者对 uPic 的使用感兴趣,就使劲点赞吧!点赞多的话我就专门写篇文章讲解 uPic 的使用。

    PS:上面这两种图片上传服务使用起来比较简单,但是只有在 macOS 上才能用。下面要介绍的图片上传服务,在 Windows / Linux / macOS 上都能用,但是可能需要一定的编程基础才能理解,如果大家看起来比较费劲,可以文章在后面留言,我可以针对每一种上传方式都单独写一篇文章介绍,争取让没有编程基础的小白也能看懂。

    PicGo-Core(命令行应用)

    PicGo-Core 是一个支持图片上传的开源 node(Node.js)模块,它也支持用插件扩展功能。

    PicGo-Core 的 GitHub 地址:https://github.com/PicGo/PicGo-Core

    因为是 node 模块,所以有两种方式安装并使用 PicGo-Core。

    安装预编译好的 PicGo-Core 二进制程序

    Typora 提供了一个 PicGo 的预编译二进制文件,使用 nexe 将node 模块打包成一个二进制文件。你只需在偏好设置面板中点击「下载或更新」按钮,Typora 就会开始下载,并直接把它放在 Typora 支持的文件夹下。由于安全规则的限制, macOS Catalina 并不支持下载预编译的 PicGo-Core 二进制文件。所以这种方式只能在 Windows 或 Linux 上使用, macOS 的用户只能用第二种方式。

    下载的 PicGo-Core 二进制文件的存放位置

    下载的 PicGo-Core 二进制文件会被保存到%AppData/Typora/picgo/目录下,其中,%AppData在不同的操作系统中含义不同,在 Windows 中,%AppDataC:/User/[username]/Roaming/AppData,在 Linux 中,%AppData~/.config。你可以在偏好设置面板中点击「打开主题文件夹」,然后打开它的上一层文件夹,就会看到「picgo」文件夹。

    通过 Node.js 包管理器安装 PicGo-Core

    这种方式需要依赖 Node.js 运行环境,如果你电脑上已经安装了 Node.js 或者 yarn,你可以在命令行中运行下面的命令来安装 PicGo-Core:

    npm install picgo -g
    
    # or
    
    yarn global add picgo
    

    然后你可以在命令行中输入which picgo,来获取 PicGo-Core 实际的安装位置。然后偏好设置面板中选择「Custom Command」作为图片上传服务,然后在「命令」输入框中输入命令[your node path] [your picgo-core path] upload。如果在环境变量 PATH 中设置了 node 和 picgo,也可以直接输入picgo upload。如下图所示。

    配置 PicGo-Core

    配置 PicGo-Core 有以下几种方式:

    方式 1:编辑配置文件

    配置文件名叫做 config.json,路径如下:

    • Linux / macOS:~/.picgo/config.json
    • Windows:C:\Users\[your user name]\.picgo\config.json

    更多细节,可以参考文档(仅有中文版本):https://picgo.github.io/PicGo-Core-Doc/zh/guide/config.html#%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6

    方式 2:通过命令行界面配置

    如果你是通过 node 安装的 PicGo-Core,那么可以输入picgo -h来获取 picgo 的帮助,根据帮助文档对 PicGo-Core 进行配置。

    如果你是在 Typora 的偏好设置面板中下载的 PicGo-Core 二进制文件,那你可以找到二进制文件的保存路径,然后在命令行中打开这个路径,输入命令./picgo -h获取帮助文档,并进行配置。

    关于如何在命令行中使用 PicGo-Core,可以参考这个文档:https://github.com/PicGo/PicGo-Core#use-in-cli

    插件使用

    使用命令行可以安装 PicGo-Core 的插件。

    PicGo.app(仅支持中文)

    PicGo 是构建自 PicGo-Core 的图形化界面应用,由于它仅支持中文用户界面,所以只有将 Typora 的语言设置为中文才能看到这个选项。

    Typora 要求 PicGo 必须是 2.2.0 及以上版本,并且要开启 PicGo-Server,PicGo-Server 是 PicGo 内部的一个小型服务,用于配合其他应用来调用 PicGo 进行上传,默认监听 36677 端口。关于 PicGo-Server 的详细说明可以参考:https://picgo.github.io/PicGo-Doc/zh/guide/config.html#picgo-server%E8%AE%BE%E7%BD%AE。当 Typora 使用 PicGo 上传图片时,PicGo 会启动并一直保持运行。

    安装 PicGo 之后,Linux / Windows 用户需要在偏好设置面板上设置 PicGo 二进制文件的路径。

    PicGo.app 和 PicGo-Core 的区别

    • 目前 PicGo.app 仅有中文版。
    • PicGo.app 提供了图形用户界面,因此与命令行界面的 PicGo-Core 相比,前者更加容易使用。
    • 使用 PicGo-Core 上传图片耗费的计算机资源更少,因为只有在上传图片的时候 PicGo-Core 的进程才会运行,上传结束后(不管成功还是失败),进程便会退出。但是如果使用 PicGo.app 上传,PicGo.app 会一直保持运行,无法自动退出。并且,PicGo.app 是一个电子应用程序,它会消耗更多计算资源。
    • PicGo.app 和 PicGo-Core 使用不同的配置文件,但是你可以把 PicGo.app de 配置文件中的picBed下面的 json 对象复制到 PicGo-Core 的配置文件中。
    • PicGo.app 还提供了其他的特性,比如上传历史、自动重命名等。

    自定义命令

    你还可以配置自定义命令去上传图片,在自定义的命令中,可以使用上面没有列出的工具或者甚至是你自己写一个工具或者脚本。Typora 会自动将所有需要上传的图片追加到你填写的命令后面。你自定义的命令必须在标准输出中输出图片的 URL,一个占一行,Typora 会根据上传图片的数量从标准输出的最后 N 行中读取图片的 URL。N 是上传图片的数量。

    举个例子,比如你写了一个工具,名叫 upload-image.sh,然后你可以在「命令」输入框中输入[some path]/upload-image.sh,Typora 会执行命令[some path]/upload-image.sh "image-path-1" "image-path-2"上传位于image-path-1image-path-2中的图片,然后这个命令应该返回类似如下信息:

    Upload Success:
    http://remote-image-1.png
    http://remote-image-2.png
    

    然后 Typora 就会从标准输出中读取到两个远程图片 URL,并将 Markdown 文件中原始的本地图片路径替换成 URL。

    你可以点击「验证图片上传选项」按钮去验证你自定义的命令是否生效。

    在自定义命令中使用当前文件名或者当前路径

    在自定义命令中可以使用${filename}${filepath},在命令执行时,他们会被替换为当前 Markdown 文件的文件名和路径,如果是还没有保存的「未命名」文件,他们会被替换为空字符串。

    插入图片时自动上传

    全局设置

    在偏好设置面板中,「插入图片时…」下方的下拉框中,选择「上传图片」选项,Typora 就会在你插入图片时自动上传。如果只想上传本地图片,那么就只勾选「对本地位置的图片应用上述规则」,如果插入的图片本来就位于网络上,但是你想再上传一遍到图床中,那就把「对网络位置的图片应用上述规则」也勾选上。

    针对每一个文件单独设置

    首先,你要勾选上偏好设置面板中的「允许根据 YAML 设置自动上传图片」,然后,如果你的 Markdown 文件在 YAML 中包含如下配置:

    typora-copy-images-to: upload
    

    当你插入图片时,Typora 会使用这个选项自动上传图片。

    或者你也可以在菜单栏中点击格式→图像→当插入本地图片时…插入 YAML 配置,开启这个功能。

    上传图片的使用

    上传指定的图片

    可以在 Typora 中,右键点击要上传的图片,选择「上传图片」。

    在这里插入图片描述

    上传所有本地图片

    如果你的 Markdown 文件中包含大量的本地图片,你想一次性把他们都上传,可以点击菜单栏中的格式→图像→上传所有本地图片

    参考资料:

    1. https://support.typora.io/Upload-Image/
    2. https://support.typora.io/Images/#when-insert-local-image%E2%80%A6

    欢迎关注我的微信公众号,扫描下方二维码或微信搜索:王虾片,就可以找到我,我会持续为你分享 IT 技术。

    qrcode_for_gh_3cfa9b908804_258

    展开全文
  • 在 LaTeX 中插入图片

    万次阅读 多人点赞 2020-10-23 11:36:30
    在科研论文中,图片是一个非常重要的组成部分。LaTeX 提供了许多定制化图片的功能。这篇文章将会介绍如何用最常见的格式插入图片、缩放图片、旋转图片,以及如何在文档中引用这些图片

    原  文:Inserting Images
    译  者:Xovee
    翻译时间:2020年9月18日

    在 LaTeX 中插入图片

    在科研论文中,图片是一个非常重要的组成部分。LaTeX 提供了许多定制化图片的功能。这篇文章将会介绍如何用最常见的格式插入图片、缩放图片、旋转图片,以及如何在文档中引用这些图片。

    介绍

    下面是一个插入图片的例子:

    \documentclass{article}
    \usepackage{graphicx}
    \graphicspath{ {./images/} }
    
    \begin{document}
    The universe is immense and it seems to be homogeneous, 
    in a large scale, everywhere we look at.
    
    \includegraphics{universe}
    
    There's a picture of a galaxy above
    \end{document}
    

    在这里插入图片描述
    LaTeX 本身不能处理图片,所以我们需要引入graphicx包:在文档的序言部分使用如下命令:

    \usepackage{graphicx}
    

    命令\graphicspath{ {./images/} }告诉 LaTeX 这篇文档中的图片所存储的位置是主文档所在目录下的 images 文件夹。

    \includegraphics{universe}是真正插入图片的那个命令。universe 是图片文件的名字(没有后缀),也就是说:universe.PNG变成了universe。图片文件的名字一般来说不能包含空格或者多个句号。

    注意:*使用文件后缀是被允许的,不过我们推荐你忽略文件的后缀。如果 LaTeX 没有找到文件的指定的后缀,它会在目录中搜索拥有该文件名的所有格式兼容的文件。更多有关的信息请见:生成高分辨率和低分辨率的图片

    在 Overleaf 中打开这个例子

    图片的路径

    当你的文档拥有很多个图片的时候,创建多个文件夹来存储图片是一个规划项目的好办法。

    命令\graphicspath{ {images/} }告诉 LaTeX 在images文件夹中寻找图片。这个路径是当前工作文件夹的相对路径,所以,编译器会在当前文档所在的目录中开始寻找文件。文件夹的路径默认情况下是相对路径,如果没有一个初始的目录被指定,例如:

    %Path relative to the .tex file containing the \includegraphics command
    \graphicspath{ {images/} }
    

    这是一个非常直接的方法来指定图片所存储的路径,不过有时候会使情况变得复杂,从而导致编译器找不到图片所在的目录。所以,你最好手动指定一个对于主 .tex 文件来说相对的图片路径,将主 .tex 文件夹表示为 ./,例如:

    %Path relative to the main .tex file 
    \graphicspath{ {./images/} }
    

    路径也可以是绝对路径。例如,如果你在一个本地 LaTeX 环境中进行工作,你可以:

    %Path in Windows format:
    \graphicspath{ {c:/user/images/} }
    
    %Path in Unix-like (Linux, Mac OS) format
    \graphicspath{ {/home/user/images/} }
    

    需要注意的是,目录的结尾也需要一个斜杠,并且路径是被包含在双大括号之间。

    你还可以设置多个路径,如果文档的图片被存储在多个文件夹中。例如,如果有两个文件夹images1images2,使用下面的命令:

    \graphicspath{ {./images1/}{./images2/} }
    

    在 Overleaf 中打开这个例子

    改变图片的大小、旋转图片

    如果我们想额外地编辑图片的属性(长、宽等),我们可以使用下面的设定:

    \begin{document}
    
    Overleaf is a great professional tool to edit online, 
    share and backup your \LaTeX{} projects. Also offers a 
    rather large help documentation.
    
    \includegraphics[scale=1.5]{lion-logo}
    

    在这里插入图片描述
    命令\includegraphics[scale=1.5]{lion-logo}会把图片lion-logo插入到文档中,额外的参数scale=1.5会把图片的大小变为原本的1.5倍。

    你也可以指定图片的长宽:

    \begin{document}
    
    Overleaf is a great professional tool to edit online, 
    share and backup your \LaTeX{} projects. Also offers a 
    rather large help documentation.
    
    \includegraphics[width=3cm, height=4cm]{lion-logo}
    

    在这里插入图片描述
    如聪明的你所想的,方括号里的参数[width=3cm, height=4cm]定义了图片的宽度和高度。你还可以使用不同的单位来定义这些参数。如果只有宽度width被指定了,那么高度会被自动调整到图片原始的比例。

    长度单位也可以被设置为文档中某些属性的相对值。例如,你可以将图片的宽度设置为文档中一行文本所占的宽度:

    \begin{document}
    
    The universe is immense and it seems to be homogeneous, 
    in a large scale, everywhere we look at.
    
    \includegraphics[width=\textwidth]{universe}
    

    在这里插入图片描述
    除了\textwidth,你还可以使用其他的 LaTeX 默认长度,例如\columnseplinewidth\textheight\paperheight等。更多有关单位的信息请见这篇文章

    LaTeX 中还有一种常见的改变图片的方法,即旋转图片:

    \begin{document}
    
    Overleaf is a great professional tool to edit online, 
    share and backup your \LaTeX{} projects. Also offers a 
    rather large help documentation.
    
    \includegraphics[scale=1.2, angle=45]{lion-logo}
    

    在这里插入图片描述
    参数angle=45会将图片逆时针旋转45度。顺时针旋转的话你可以使用负数。

    在Overleaf中打开这个例子

    图片的位置

    在上一个章节中,我们介绍了如何在文档中插入图片,但是文字和图片的结合可能并不是我们想要的样子。所以我们接下来介绍一种新的环境。

    In the next example the figure will be positioned 
    right below this sentence.
    
    \begin{figure}[h]
    \includegraphics[width=8cm]{Plot}
    \end{figure}
    

    在这里插入图片描述
    figure环境的作用是在文档中将图片展示为浮动元素。这意味着你可以把图片放置在figure环境之中,不需要再去关注图片的位置,LaTeX 会自动把图片放置在文档中的合适位置。

    当然,有些时候我们需要更细致地控制图片的位置。我们可以使用一种额外的参数来控制图片的位置。在这个例子中,begin{figure}[h],方括号中的参数h意味着 here。下面的表格中列出了参数的可选值。

    参数位置
    h将浮动元素的位置设定为 here(这里),也就是说,大约位于其在文档中出现位置(是大约,而不是完全精确)
    t将浮动元素的位置设定为页面的上方(top)
    b将浮动元素的位置设定为页面的底部(bottom)
    p将浮动元素仅放置在一个特殊的页面
    !重新设置LaTeX的一个内部参数,这个参数决定了LaTeX如何判断一个浮动元素的位置够不够“好”
    H将浮动元素精确地放置在它在文本中所出现的位置。这个参数需要引入float包,它有可能会造成一些错误。这个参数有时候等价于h!

    在下面的例子中,你可以看到,尽管图片定义在文字之后,但是图片依旧出现在了页面的顶部。

    In this picture you can see a bar graph that shows
    the results of a survey which involved some important
    data studied as time passed.
    
    \begin{figure}[t]
    \includegraphics[width=8cm]{Plot}
    \centering
    \end{figure}
    

    在这里插入图片描述
    命令\centering会将图片居中显示。默认的对齐选项是向左对齐。

    你也可以将文字环绕在图片的周围。如果文档包含一些小的图片,这样做看起来会更好一些。

    \begin{wrapfigure}{r}{0.25\textwidth} %this figure will be at the right
        \centering
        \includegraphics[width=0.25\textwidth]{mesh}
    \end{wrapfigure}
    
    There are several ways to plot a function of two variables, 
    depending on the information you are interested in. For 
    instance, if you want to see the mesh of a function so it 
    easier to see the derivative you can use a plot like the 
    one on the left.
    
    
    \begin{wrapfigure}{l}{0.25\textwidth}
        \centering
        \includegraphics[width=0.25\textwidth]{contour}
    \end{wrapfigure}
    
    On the other side, if you are only interested on
    certain values you can use the contour plot, you 
    can use the contour plot, you can use the contour 
    plot, you can use the contour plot, you can use 
    the contour plot, you can use the contour plot, 
    you can use the contour plot, like the one on the left.
    
    On the other side, if you are only interested on 
    certain values you can use the contour plot, you 
    can use the contour plot, you can use the contour 
    plot, you can use the contour plot, you can use the 
    contour plot, you can use the contour plot, 
    you can use the contour plot, 
    like the one on the left.
    

    在这里插入图片描述
    为了做到上面的效果,你需要引入wrapfig包。在文档的序言中引入它:

    \usepackage{wrapfig}
    

    现在你可以定义wrapfigure环境:

    \begin{wrapfigure}{l}{0.25\textwidth}
    ...
    \end{wrapfigure}
    

    需要注意的是,这个环境拥有两个额外的参数。

    {l}
    这个参数定义了图片的对齐方式。l是左边,r是右边。如果你的文档是book或者其他类似的格式,o代表着页面的外边界,i代表着页面的内边界。

    {0.25\textwidth}
    这个参数定义了图片元素的宽度。这个不是图片本身的宽度,图片本身的宽度必须使用includegraphics命令。需要注意的是,这个宽度是文本宽度的相对大小,你也可以使用其他常规的距离(cm, in, mm 等)。更多距离单位请见这篇文章

    \centering
    我们前面已经介绍过这个参数了。但是在这个环境里,图片的居中位置是相对于它的容器,而不是页面的文本。

    这篇文章更详细地介绍了图片和表格的位置。

    在Overleaf中打开这个例子

    图题、标签、引用

    给图片添加标题和标签是两个非常重要的工具。

    图题

    让我们从一个例子开始。

    \begin{figure}[h]
    \caption{Example of a parametric plot ($\sin (x), \cos(x), x$)}
    \centering
    \includegraphics[width=0.5\textwidth]{spiral}
    \end{figure}
    

    在这里插入图片描述
    非常简单,对吧?只需要添加\caption{Some caption}命令,在大括号内输入你要添加的文字就可以了。命令的位置决定着图题会出现在图片的上方或者下方。

    图题也可以放置在图片的侧方。引入sidecap包即可。

    \usepackage[rightcaption]{sidecap}
    
    \usepackage{graphicx} %package to manage images
    \graphicspath{ {images/} }
    
    \begin{SCfigure}[0.5][h]
    \caption{Using again the picture of the universe.
    This caption will be on the right}
    \includegraphics[width=0.6\textwidth]{universe}
    \end{SCfigure}
    

    在这里插入图片描述
    它有两个新的命令。

    \usepackage[rightcaption]{sidecap}
    如你所想,这个命令会引入sidecap包,并且方括号中的参数会将文档中的图片的图题设置在图片的右方。你也可以使用leftcaption参数。对于book类型的文档,你还可以使用outercaption或者innercaption

    \begin{SCfigure}[0.5][h] \end{SCfigure}
    这个命令定义了一个类似于figure的环境。第一个参数定义了图题相对于图片的宽度。第二个参数hfigure环境中的h作用相同。

    LaTeX中还有更多的命令来对图片进行定制化,你可以在本文的末尾找到更多信息。

    标签和交叉引用

    与LaTeX文档中的许多其他元素相同(例如公式、表格等),图片也可以在文本中被引用。你只需要简单地对其添加一个标签就可以了,然后使用这个标签来在文本中引用这个图片。

    \begin{figure}[h]
        \centering
        \includegraphics[width=0.25\textwidth]{mesh}
        \caption{a nice plot}
        \label{fig:mesh1}
    \end{figure}
    
    As you can see in the figure \ref{fig:mesh1}, the 
    function grows near 0. Also, in the page \pageref{fig:mesh1} 
    is the same example.
    

    在这里插入图片描述
    下面我们介绍三种生成交叉引用的命令。

    \label{fig:mesh1}
    这个命令设置了图片的标签。对标签添加一个前缀是一个很好的习惯,例如对图片添加fig,对表格添加tab等。

    \ref{fig:mesh1}
    这个命令在文本中添加一个数字,数字对应着这个图片。这个数字会自动生成,并且当你插入其他图片的时候,它会自动更新。

    \pageref{fig:mesh1}
    这个命令会输出图片所在的页数。

    如果你想要引用一个图片,那么\caption命令是强制的。

    LaTeX 另外一个强大的功能是,你可以自动生成文档中图片的列表:

    \listoffigures
    

    在这里插入图片描述
    这个命令仅对有标签的图片有效。

    重要提示:你必须编译LaTeX文档两次来使交叉引用等功能正常显示。

    在Overleaf中打开这个例子

    生成高分辨率的和低分辨率的图片

    我们在\includegraphics命令中输入图片的文件名的时候,我们忽略了图片文件的后缀。事实上,添加后缀并不是强制的,尽管很多时候添加后缀是很有用的。如果文件名的后缀没有被输入,那么LaTeX会在当前文件夹中自动搜索所有支持的文件格式,并且会用默认的顺序来搜索各种后缀(这个顺序可以自定义)。

    如果你需要经常在开发模式和生产模式之间切换,那么这个功能会很有用。在开发模式中(当文档还没有完成的时候),你可能想去使用低分辨率的图片(一般来说是png格式的)来加速编译。在生产模式中(生成文档的最终版本),你可能想要使用高分辨率的图片。

    你可以这样做:

    • 不要在\includegraphics命令中输入文件名的后缀
    • 在文档的序言中设定你想要的后缀

    这样,我们可以在图片的两种格式之间灵活切换,例如venndiagram.pdf(高分辨率)和venndiagram.png(低分辨率)。然后我们可以在序言中使用下面的命令:

    \DeclareGraphicsExtensions{.png,.pdf}
    

    上面的命令的作用是,如果在同一位置中,两个拥有相同文件名,但是后缀不同的文件(例如venndiagram.pdfvenndiagram.png),那么位置在前的版本将会被使用(这个例子中的png)。如果没有png文件,那么pdf文件会被使用。

    当文档完成之后,为了使用高分辨率的pdf图片,我们可以更换后缀的顺序:

    \DeclareGraphicsExtensions{.pdf,.png}
    

    如果pdf图片还没有转换为png格式,我们可以在LaTeX中直接生成低分辨率的png图片。我们首先在序言中引入下面的命令(在\usepackage{graphicx}命令之后):

      \usepackage{epstopdf}
      \epstopdfDeclareGraphicsRule{.pdf}{png}{.png}{convert #1 \OutputFile}
      \DeclareGraphicsExtensions{.png,.pdf}
    

    如果venndiagram2.pdf存在,但是venndiagram2.png不存在,那么venndiagram2-pdf-converted-to.png文件将会被创建。命令convert #1用来执行转换操作,你也可以对它添加额外的参数,例如convert -density 100 #1

    这里还有一些重要的事情需要注意:

    • 为了让自动转换正常工作,我们在执行pdflatex命令的时候,需要添加--shell-escape参数
    • 对于最终的生产版本,我们必须把\epstopdfDeclareGraphicsRule命令注释掉。这样只有高分辨率的图片会被加载。我们还需要改变顺序的优先级。

    在Overleaf中打开这个例子

    参考指南

    LaTeX 单位和长度

    缩写定义
    pt一个点,默认的长度单位。大约相当于0.3515mm
    mm毫米
    cm厘米
    in英寸
    ex在当前字体大小的情况下字母x的高度
    em在当前字体大小的情况下字母m的宽度
    \columnsep列之间的距离
    \columnwidth列的宽度
    \linewidth当前环境下行的宽度
    \paperwidth页面的宽度
    \paperheight页面的高
    \textwidth文本的宽度
    \textheight文本的高度
    \unitlengthpicture环境下units的长度

    LaTeX中图片的类型

    latex
    如果你使用latex来编译,我们只可以使用EPS格式的图片,这种格式是矢量格式。

    pdflatex
    如果你使用pdflatex来生成pdf文档,我们可以使用下面格式的图片:

       JPG: Best choice if we want to insert photos
       PNG: Best choice if we want to insert diagrams (if a vector version could not be generated) and screenshots
       PDF: Even though we are used to seeing PDF documents, a PDF can also store images 
       EPS: EPS images can be included using the epstopdf package (we just need to install the package, we 
            don't need to use \usepackage{} to include it in our document.)
    

    矢量图片或者位图?

    图片可以是矢量的,或者是位图(bit-map)。一般来说,我们并不需要关心图片的格式。不过如果我们知道图片格式之间的差异,我们就可以选择一种合适的图片格式来使用。如果我们的图片是矢量的,那么它应该是PDF或者EPS。如果我们的图片是位图,那么它应该是JPG或者PNG。在PDF或者EPS中存储bit-map会消耗大量的存储空间。

    在Overleaf中打开这个例子

    延伸阅读

    更多信息请见:

    展开全文
  • 同样是由jQuery插件实现的一款鼠标悬停放大图片的特效,用在网页上会提升操作体验,可结合图片滚动来使用,鼠标放在图片上的时候,图片放大突出显示,很不错的效果。
  • 实现Android中WebView图片的缓存,并且实现如何替换WebView中默认图片以及如何实现图片的点击。
  • PHP+jQuery+html5实现图片选取裁剪上传(兼容手机上传)

    千次下载 热门讨论 2015-04-24 11:20:25
    在网上找到了图片上传插件jquery.min.js,但没有上传功能,自己花了10分钟给加上去了哈,有bug留言,一般当天改完上传。 转自:素材火jQuery教程演示:http://www.sucaihuo.com/js/71.html
  • opencv:26mm matlab:15mm;(包含两张图片);可直接打印使用
  • IOS 获取网络图片的大小

    千次下载 热门讨论 2014-05-19 11:05:42
    IOS 获取网络图片的大小 URL Image Size
  • LCD常用测试图片

    千次下载 热门讨论 2013-06-17 15:55:14
    LCD测试的一些常用图片: 1、色级 2、R\G\G图片 3、彩条 等图片,调试LCD效果的时候可以用的到。
  • C#使用webBrowser控件获取URL下载图片

    千次下载 热门讨论 2013-10-05 01:46:09
    通过C#网络编程的webBrowser获取网页中的url并简单的尝试下载网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识、正则表达式实现浏览、获取url、下载图片三个功能.而且很清晰的解析...
  • Android ListView加载网络数据和图片

    千次下载 热门讨论 2014-07-03 17:46:43
    上一篇写到了ListView的分页功能,这篇接着介绍ListView。 一般情况下的APP中的ListView的显示包括:图片+数据,所以这篇文章介绍Listview加载网络数据和图片,数据采用的是JSON格式。
  • 使用HTML5 canvas 标签进行图片裁剪、旋转、缩放示例代码
  • PhotoSwipe是一个图片放大插件,兼容pc和移动端,经历过多个版本的迭代且一直在不断更新,踩过的坑不知凡几,在移动端有着巨大的优势。 1、可控制多种风格如: 标题、分享、全屏按钮,点击事件、是否加入字幕,...
  • 【最新】解决Github网页上图片显示失败的问题

    万次阅读 多人点赞 2019-06-08 17:48:54
    原文请前往我的另一片文章看吧:解决办法 本文主要针对Github网页版头像等图片asset显示失败的问题提出一种简单的解决办法,无需其他工具。 附加列表 比如使用的是windows系统,所以使用Sublime Text打开:C:\...
  • 将彩色图片转换为灰度图片

    千次下载 热门讨论 2015-06-11 19:46:35
    将彩色图片转换为灰度图片
  • java 图片处理工具类 方法说明 方法 描述 cutCenterImage 从中间裁剪图片不进行缩放 zoomImage 缩放图片根据最短边 zoomCutCenterImage 缩放裁剪图片,先进行缩放,然后进行裁剪 实现代码 public ...
  • android经典图片压缩算法 永不失真

    千次下载 热门讨论 2013-12-19 10:21:56
    对各种大图片进行压缩,压缩不失真。大图片压缩后大小在100k以内,可以根据自己的需求进行设置压缩大小。
  • HTML+JS实现下载图片,一篇博客可以阅读明白,js实现图片下载,实现前端下载图片
  • Python 爬虫系列教程一爬取批量百度图片

    万次阅读 多人点赞 2018-07-29 19:40:05
    很久之前就学习了Python的...当你需要下载大量图片的时候,或许你会去百度图片里一张张右键下载,但这样未免太麻烦了,有了这个工具,你直接运行下程序,输入你想要下载图片的关键字,然后输入你想要下载图片的数...
  • 文章目录前言一:获取图片网址1.注册gitee,建立gitee图片仓库2.上传图片至gitee图片仓库二:修改图片网址,插入到md文件中并预览1.修改图片网址2.将修改好的网址插入md文件并预览总结 前言 本文详细介绍了在md文件中...
  • 在opencv中读取文件夹中的多幅图片并保存到另一文件夹中

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,342,581
精华内容 1,737,032
关键字:

图片

友情链接: pi.py.zip