QGIS图片添加全攻略:从Logo到示意图,三种场景一次讲透
前段时间做项目成果图需要在QGIS里给专题图加一个公司Logo再把几张现场照片和示意图排进图框里。我本以为导入图片是件很简单的事结果在画布里拖了半天Logo要么显示在莫名其妙的位置要么放大缩小直接糊了折腾了一阵子才把几个场景彻底捋顺。后来我把这个主题收进了《QGIS快速入门与应用基础》的教程计划里就是这一篇图片添加Logo/示意图。发现很多人问的其实不是QGIS能不能加图片而是我到底该用哪种方式加。这个问题想通了后面基本就是熟练度的事。这一篇我就按实际使用场景展开把地图画布、打印布局、符号化这三条路分别讲透。1. 先想清楚你是往地图里加图片还是往图纸里加1.1 为什么同样一张图有人加载成功有人完全找不到入口QGIS里添加图片从来不是一个单一功能它至少对应三个完全不同的入口作为栅格图层导入地图画布、作为图片项插入打印布局、作为符号或标注附着在要素上。很多人搞混是因为在界面上找不到一个叫做添加图片的通用按钮。我见过最典型的求助有人说我在QGIS里拖入了一张Logo怎么跑到图层列表里了而且地图上显示的位置不对。这其实就是把地图画布和打印布局搞混了。地图画布是一个有真实地理坐标的空间图片一旦作为栅格图层进来它必须有一个地理位置才能显示在正确的地方而打印布局是一张白纸Logo只是躺在纸面上的装饰元素不需要坐标。所以解决问题的第一步不是学操作而是判断需求属于哪一种想给最终出图加Logo、加照片、加示意图 → 去打印布局里操作想把扫描的规划图、手绘图、航拍图叠到真实地图上做参照或数字化 → 作为栅格图层导入并配准想用图片代替点图标的默认圆形、把照片贴在地图上做说明 → 用符号化和图片标注这三类需求对应三个不同方向接下来分开讲。1.2 图片素材格式怎么选很多初学者忽略格式我直接说结论带地理坐标的图GeoTIFF或JPG配同名世界文件→ 适合当底图PNG → 支持透明通道适合Logo、图标、带白边需要抠掉的图JPG → 体积小但不支持透明适合照片、扫描件SVG → 矢量图缩放不糊适合Logo、点符号、布局里的装饰元素在布局里如果放大Logo发现边缘发虚八成是用了分辨率不够的PNG或JPG。公司Logo最好找设计要一份SVG源文件出图质量完全不一样。后面第4章会专门说这个。2. 把Logo拖进画布它为什么跑到了非洲西海岸2.1 无坐标图片的伪坐标原理先还原一个非常常见的情景你刚装好QGIS打开一个矢量图层然后把一张项目Logo的PNG直接从文件夹拖进QGIS窗口。QGIS会弹出一个坐标参考系统选择器窗口默认通常是WGS 84。你随手点确定然后发现画布上多了一个栅格图层但它不在你预期的任何位置——对它跑到地图坐标系的原点附近去了。这是为什么因为这张PNG没有任何地理参考信息GDAL在读取它的时候只能把图片的左上角像素当作坐标原点0,0右下角按照像素尺寸和默认分辨率换算。在WGS 84下0度经线和0度纬线的交点位于西非几内亚湾附近的海域。所以你的Logo就漂在了大西洋上。这不是Bug而是栅格数据最基本的逻辑凡是栅格图层不管有没有地理参考QGIS都会给它在某个坐标系里分配一个范围。没有地理参考的图这个范围就是从(0,0)开始的一个假范围。你把它当成一个真实实体的图层来用当然会错位。2.2 无坐标图片正确入图的几种做法那如果我就是想把一张没有坐标的示意图叠到地图上该怎么做按精度需求分两种情况。第一种不追求精确对齐只要大差不差能放在目标区域附近。这种情况可以用栅格平移的思路。先查看图片图层的范围然后通过处理工具箱里的栅格平移工具输入X、Y方向的偏移量把图片从(0,0)平移到目标区域附近。但说实话这个操作要靠肉眼反复试偏移量效率不高我只在数据非常粗糙的临时展示时用。第二种要求图片与底图道路、地块严格对齐。这就要用到Georeferencer地理配准器也是真正建议的做法。具体流程放在第3章详细写。还有第三种如果你只是想在屏幕上放一张参考照片并不需要它参与空间分析那更推荐用图片标注Annotation而不是做成栅格图层。图片标注可以自由拖动、缩放不会污染你的图层列表第5章会专门讲。2.3 一个值得养成的检查习惯拿到任意一张图片文件时养成先看它有没有空间参考的习惯。在图层列表里右键图层 → 属性 → 信息可以看到范围和CRS。如果CRS显示为未知/默认范围里的坐标是一些奇怪的整数比如0,0到800,600那就说明这张图没有任何地理参考不能直接当作底图用。另外在文件管理器里看图片旁边有没有同名文件也可以判断比如plan.jpg旁边如果跟着plan.jgw世界文件和plan.prj投影文件说明它是有地理参考的直接拖进QGIS就会落到正确位置。很多测绘或设计单位交付的栅格图就是JPGJGW这组合见到这种文件不必慌直接拖。3. 用Georeferencer让普通图片长出坐标3.1 哪些图片天生带坐标哪些不带先说结论。测绘、遥感领域常见的GeoTIFF坐标信息直接写在文件头里加入QGIS后位置就是准的。ArcGIS导出的JPG有时会附带一个.jgw世界文件里面记录了图片的仿射参数GDAL能自动识别。还有一些设计单位给的PDF转出的图或者网上下载的平面图通常都不带任何坐标信息。判断方法上面已经说了这里再补一个看图层范围的小技巧如果图片图层的范围落在真实地理范围内比如你的项目区在某个城市的经纬度附近那基本是有地理参考的如果范围是类似(0,0)到(1920,1080)这种像素尺度那肯定没有。3.2 地理配准完整操作流程打开方式菜单栏栅格 → 地理配准 → 地理配准器。这个工具在QGIS 3.x里是内置的不需要装插件。界面左边是图片预览右边可以加载参考数据。操作流程我拆成六步打开图片在配准窗口里打开你的无坐标图片。此时会提示你选择目标坐标系我一般直接选和当前工程一致的CRS。加载参考数据在配准器窗口里把已经带有坐标的底图、矢量图层或者在线瓦片底图加载进来。这样你可以在右侧看到真实地图左侧看到待配准的图片。添加控制点在左侧图片上找一个明显的地物点比如道路交叉口、建筑角点点击后弹出对话框再在右侧地图上找到对应点输入坐标或直接点击获取。这样一对点就是一组控制点。控制点数量与分布线性变换1阶多项式至少需要3个控制点但我强烈建议每个角、中间各加一些保证图上4到6个均匀分布的控制点。点越多配准的整体误差越小但也要避免点太多导致局部扭曲。设置变换参数点工具栏上的变换设置按钮。变换类型里如果图片整体变形不大用线性或1阶多项式足够如果扫描图片有明显失真考虑2阶多项式。重采样方法选双线性或三次卷积都行前者快一些后者边缘更平滑。启动配准设置输出文件名和路径点击开始配准按钮。完成后勾选在QGIS中打开配准结果图片就会以一个新的GeoTIFF格式加载进画布位置已经和底图对齐了。配准完成后一定要看配准窗口下方的残差表里面记录了每个控制点的误差RMSE。如果某个点的残差特别大回到该点微调直到总体误差在可接受范围内。对于城市规划示意图这类精度要求不高的图一个像素以内的残差就够了如果是做精确数字化建议把均方根误差控制在1米以内视底图精度而定。3.3 实际案例把一张扫描的校园平面图叠到卫星底图上我去年帮朋友做一个校园空间分析项目手里只有一张扫描版的校园平面图上面标注了每栋楼的名称但没有任何坐标。我的做法是先加载在线底图这里用的是OSM标准瓦片作为参考。打开Georeferencer导入扫描件CRS选当前工程的Web墨卡托。选了6个控制点操场四个角、主教学楼两个对称角每对点都在扫描件底图和地图上反复核对。用1阶多项式配准重采样选双线性输出为GeoTIFF。加载后把配准图层透明度调到50%对比底图道路、楼栋轮廓基本吻合然后才开始在上面做要素勾绘。这个过程最大的收获是控制点千万别只集中在图的中央四处都要点满不然边缘区域可能严重扭曲这是初学者最常踩的坑。4. 出图前的最后一步在布局中插入Logo和示意图4.1 布局里添加图片项的操作路径如果你已经做完地图准备导出一张成品图这时要加Logo和示意图入口在打印布局。操作路径项目 → 新建打印布局 → 起个名字 → 进入布局窗口。在布局界面左侧工具栏里找到添加图片按钮图标是一张带小山的图片点击后在画布上拖出一个矩形框右侧项属性面板里选择图片文件即可。这里和地图画布最大的区别是图片项没有坐标概念它就是一个摆在纸面上的矩形框随便放哪儿都行。你可以把Logo放在左上角、把示意图放在右下角完全不受地图范围影响。4.2 图片项属性面板的关键设置选中图片项后右侧项属性面板从上到下有几个关键参数一个一个说图片源点击浏览选择图片文件也可以用SVG文件。如果选SVG在布局里自动作为矢量渲染缩放任意大小都不会模糊。尺寸可以直接输入宽度、高度数值。这里有个特别重要的复选框——保持长宽比强烈建议勾上。不勾的话拖拽边框时图片会被拉伸变形Logo变扁变长这是最常见的出图败笔。旋转有些照片方向不对直接在这里填旋转角度即可不用去外部软件改。透明度和混合模式如果你想把Logo或水印半透明地叠在地图上方可以调透明度。混合模式一般默认正常偶尔做水印效果时可以用。背景和边框可以给图片项加一个底色或边框让照片在白纸上更突出。我常用的是给照片加一个1磅的灰色边框看起来更专业。4.3 用PNG还是SVG做Logo差别有多大我见过不少单位用一张从Word里截出来的JPG Logo做模板出图之后Logo周围一个白框非常难看。原因很简单JPG不支持透明通道白色背景直接成了白色色块。正确做法用带透明通道的PNG或者SVG。PNG的透明背景可以在Photoshop、Illustrator或者在线工具里批量处理把白底抠掉SVG则是矢量格式如果设计部门能提供直接拿来用是效果最好的。我个人的建议是把常用的公司Logo、项目名称、数据来源标志都整理成SVG放到一个统一文件夹里专门留给布局模板用。这样每次做图不用翻聊天记录找设计源文件效率高很多。QGIS里也可以在设置 → 选项 → 系统 → SVG路径里添加自定义SVG文件夹这样在符号选择和图片项里都能快速调用自己整理的SVG素材。4.4 做一个能反复套用的布局模板布局做多了以后你会发现每次摆Logo、放图例、放标题、放比例尺都是重复劳动。我的建议是做一次存成模板。操作在布局窗口里把所有固定元素Logo、标题栏、图例框、图片项框架都摆好位置然后项目 → 另存为模板下次新建布局时直接套用只需要替换地图内容和更新数据即可。这块特别适合单位里多个项目统一出图风格Logo位置、大小、边框风格完全一致领导看了也舒服。5. 图片还能当符号用自定义点位图标与图片注释5.1 把PNG/JPG变成点图层的符号除了做底图和布局装饰图片在QGIS里还有一个高频用途当点符号。比如你做停车场分布图不想用默认的圆点想用一张小汽车的图标或者做应急设施分布图每个点位放一个对应设施的图片标记。这两种需求都可以通过图层符号化实现。操作路径右键点图层 → 属性 → 符号化 → 点开符号层类型下拉框选择SVG标记或栅格图像标记。SVG标记适合矢量图标内置了很多通用符号箭头、旗帜、树、建筑等也可以选择你自己的SVG文件。优点是放大缩小不糊出PDF时还能保持矢量。栅格图像标记适合PNG、JPG这类位图。如果你有一整套设备照片想直接作为点符号显示用它。缺点是画布缩放级别变化时图片会跟着缩放太大或太小时会显模糊。我自己的习惯能用SVG绝不用PNG尤其是最终要输出高分辨率PDF的成果图。但如果是现场照片做点位展示那只能用栅格图像标记。5.2 图片注释地图画布上的便利贴QGIS里有一个不算新但很多人不知道的功能图片注释。说白了就是让你在地图画布上直接贴一张图片位置可以固定在某个地理坐标也可以固定在屏幕角落。操作路径找到标注工具栏如果没显示右键工具栏空白处勾选标注点添加图片标注图标然后在地图画布上点击、拖拽会生成一个图片标注框。右键该标注 → 属性可以设置图片文件、尺寸、位置类型。图片注释和栅格图层的区别很重要标注不参与空间地理坐标的精度计算它更像一个附着在画布上的贴纸。你可以把现场照片贴在地图旁边做内业核对也可以把设计参考图贴在画布空白处。它不会污染图层列表也不想改的时候直接删除非常灵活。我经常用的一个场景外业拍了现场照片回到室内打开QGIS把照片作为图片标注贴在对应的地块旁边一边看图一边核对属性数据。这个操作比打开一个独立的图片查看器再来回切换窗口效率高得多。5.3 组合使用示例点位图标 图片注释 布局Logo假设你现在要做一个项目汇报图一张A3版面左侧是地图右侧留了说明栏。实际组合起来大概是地图中用地块边界矢量图层显示范围兴趣点用自定义SVG图标做符号化。地图角落用图片标注贴了一张现场照片用于说明现状。布局中左侧是地图项左上角放公司LogoSVG右上角放项目名称底部放图例和比例尺右下角放一张项目区位示意图。这三层各司其职地图画布里的图层处理空间数据标注处理临时说明布局负责最终版面。理顺之后做图速度会明显提升。6. 图片加载失败、变模糊、比例失衡的排查思路6.1 常见问题与处理对照表我把平时遇到最多的图片相关问题整理成了表格方便大家按图索骥症状根本原因解决办法拖入图片后画布没反应图片格式不是GDAL支持的栅格格式或文件损坏换一张或用图层 → 添加图层 → 添加栅格图层手动加载试试图片加载成功但位置不对图片没有地理参考被放在坐标系原点用Georeferencer配准或改用图片标注图片变形布局中未勾选保持长宽比勾选该复选框然后重新输入宽度或高度Logo周围有白底用了JPG或不带透明通道的图片换成PNG透明背景或SVG符号化时找不到图片SVG路径设置里没有添加自己的文件夹在设置 → 选项 → 系统 → SVG路径添加布局导出PDF后图片模糊图片分辨率太低或导出DPI设置不够使用高清图建议300dpi以上导出Logo用SVGGeoTIFF加载了但位置偏移坐标系统不一致或缺少投影文件检查图层的CRS是否与工程一致重新指定或重新导出图片作为底图太亮看不清矢量图片本身色彩太重右键图层属性 → 透明度调到40%~60%图片注释想固定在某个地理位置上但拖动后不固定注释属性里位置类型设成了屏幕坐标在注释属性中改为地图坐标6.2 排查思路先缩小范围再动手遇到图片问题我一般按这个顺序排查格式对不对 → 有没有地理参考 → 是在地图画布还是布局中显示 → 是显示位置错还是显示效果差。四个问题过一遍90%的情况都能自己解决。比如报错Layer is not a valid raster layer基本都是格式问题换个软件转成PNG或TIFF如果图片加载了但位置在海上都是坐标参考问题去配准或改标注如果布局里显示效果不好看原始文件分辨率。6.3 我踩过的几个具体坑这里写几个真实的教训希望能帮你避开。第一个坑为了省事直接把JPG格式的Logo拖进了布局结果导出的PDF里Logo周围一个白色大方块非常突兀。后来把所有Logo统一转成透明背景PNG和SVG这个问题再也没有出现过。第二个坑用一张低分辨率的示意图做布局配图当时在屏幕上看着还行导出300dpi的PDF后图里的文字完全没法看。从那以后我给自己定了一条规矩凡是放进布局的位图宽度至少要2000像素以上矢量图则直接用SVG。第三个坑配准的时候控制点只点了中央区域结果图幅边缘变形严重楼栋轮廓和底图错开了十几米。第二次重新配准四角各加控制点残差立刻降下来了。所以配准这步真的不能偷懒控制点分布比数量更重要。第四个坑图片标注属性里默认的是屏幕坐标我把它当成地图坐标使用结果地图一移动照片就留在原地了一度以为是自己操作错了。后来才搞明白屏幕坐标和地图坐标的区别地图坐标会跟着地图走屏幕坐标是固定在画布角落不动的。临时看图用屏幕坐标没问题但要做现场点位对照应该选地图坐标。7. 给新手的几条操作习惯建议图片添加这个功能单拿出来每一个都不复杂但组合起来操作思路要清晰。最后分享几个我自己一直在用的习惯纯个人经验。先建好素材库。把你常用的Logo、符号图标、示意图都整理到一个固定文件夹里分成SVG和PNG两个子目录。SVG路径配置好了之后不管是做符号化还是布局模板调用都很快。我自己现在做一张专题图从打开软件到排出成品版面基本不会超过十分钟大部分时间都在数据整理而不是纠结图片摆放。再保存一套标准模板。单位里出图风格统一其实是一件性价比极高的事。把Logo位置、标题栏样式、图例位置、比例尺位置都固定下来模板存好后面每个项目只需要替换地图内容和数据。成果的专业感一下就上来了。最后遇到图片显示不理想时先别急着换软件先看图层属性里的范围和CRS。我见过不少人因为一张图位置不对把QGIS卸载重装了一遍其实问题根本不在软件而是这张图压根没有地理坐标。搞清楚图片有没有坐标是处理所有图片问题的起点。