使用HTML批量拼图

几种拼图的方式

1)作图的时候就用subplot或者grid.arrage等软件自带的方式拼图

2)将生成的图片载入PowerPoint或者PS拼图

3)使用HTML拼图

用HTML拼图其实是一种常见的批量拼图方式,特别是一些流水线处理方式中,它成了做summary的最好方式。

比如:fmriprep的报告就是使用html呈现summary,简洁直观

https://fmriprep.org/en/stable/_static/sample_report.html

5a423b47cc5b975406873a63343c0ed2.png

再比如:Freesurfer做visual QC需要生成很多皮层区域分区的图,使用html拼接起来能提高QC工作效率。

965066784ad99ac6a621bc5b9e9c37f5.png

论文作图偶尔也会需要批量拼图,不想用PS手动拼图的话,可以考虑html。这里分享一种简单的拼图方式。

比如分别对两组数据做了1、2、3种分析,

5b0a061789823545befa8ee26640e25b.png

每个分析都有4个结果图

3c449218964a5d51ea4181098c487e4f.png

现在使用html快速呈现这些结果。

html样式部分

<style>
* {
  box-sizing: border-box;
}
.row {
  display: flex;
}
/* Create equal columns that sits next to each other */
.column {
  flex: 50%;
  padding: 5px;
}


#parent {
  align-items: center;
  display: flex;
  justify-content: center;
  margin: auto;
  width: 100%;
}
#left {
position: relative;
  right: 25%;
  transform: translateX(+50%);
  font-size: 15pt;
  font-weight: bold;
}
#right {
  position: relative;
  left: 25%;
  transform: translateX(+0%);
  font-size: 15pt;
  font-weight: bold;
}


</style>
  • row和column定义之后载入图片的样式,它相当于一个容器,之后载入图片使用它们的类属性。

  • #parent #left #right是text的样式,用于调整呈现title的位置。

html的<body>部分

首先对<div>使用之前定义的文字样式,文字的位置在之前的left和right样式中调整即可。

<div id="parent">
        <span id="left">BSL</span>
        <span id="right">FU2</span>
</div>

1d293c6ba12f3332a04a54c566529de3.png

加入analysis的title

<h3>Analysis 1</h3>

4202216a5652162672281c994522aaf5.png

使用row和column类载入analysis1的图片,顺序将结果装到column容器里即可。

<div class="row">
            <div class="column">
              <img src="BSL_analysis1/results1.jpg"  style="width:100%">
            </div>
            <div class="column">
                <img src="BSL_analysis1/results2.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="BSL_analysis1/results3.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="BSL_analysis1/results4.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis1/results1.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis1/results2.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis1/results3.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis1/results4.jpg"  style="width:100%">
              </div>
          </div>
        </div>

c1c25edf55a943f87afee1cd50204c4f.png

对于analysis2使用同样的操作

<h3>Analysis 2</h3>
        <div class="row">
            <div class="column">
              <img src="BSL_analysis2/results1.jpg"  style="width:100%">
            </div>
            <div class="column">
                <img src="BSL_analysis2/results2.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="BSL_analysis2/results3.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="BSL_analysis2/results4.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis2/results1.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis2/results2.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis2/results3.jpg"  style="width:100%">
              </div>
              <div class="column">
                <img src="FU2_analysis2/results4.jpg"  style="width:100%">
              </div>
          </div>
        </div>

6a92f7f3ec3ef22ec42ab1a9c38b39d8.png

拼图完成,之后可以增加一点分割线,方法有很多。

在style中定义垂直中线的样式

.vl {
  border-left: 3px solid rgb(144, 248, 248);
  height: 90%;
  position: absolute;
  left: 50%;
  margin-left: -3px;
  top: 0;
}

在<body>中增加一个该样式的<div>即可

<div class="vl"></div>

6a33a75bc8ee23ed2178e2a67708a5ec.png

也可以增加水平的分割线,使用HR放在<body>中适合的位置即可

<HR align=center width=100% color=#987cb9 SIZE=1>

d40ee49f935d0ca29afb914518c80ac1.png

用bash写html

在对HTML的基本操作了然于心之后,可以使用代码批量修改html中的内容了。主要是两种方式,第一使用JS<script>载入这些图片,第二使用编程语言生成所需html,基本是hardcoding,但可以用for循环偷懒。第一种是最正确的方式,但不是一两个小时可以搞明白的,这里尝试第二种,用shell script,当然任何编程语言都可以胜任。

下面是主要的循环部分,其他部分全部是用echo做hardcoding。

analysis_list=('analysis1' 'analysis2')
data_list=('BSL_' 'FU2_')
results_list=('results1.jpg' 'results2.jpg' 'results3.jpg' 'results4.jpg')


for ana in ${analysis_list[@]};do
  echo  "<h3> $ana </h3>" >> test.html
  echo  "<div class=\"row\">" >> test.html
  for data in ${data_list[@]};do
  echo $data 
    for results in ${results_list[@]};do
      file2load=$data$ana/$results
      echo   "<div class=\"column\">" >> test.html
      echo   "<img src=\"$file2load\"  style=\"width:100%\">" >> test.html
      echo  "</div>" >> test.html
    done
  done
  echo "</div>"  >> test.html
done

最后的建议

  • 如果手动复制粘贴替换工作量可以接受,直接写html

  • tiff格式的图片chrome载入不了

  • html中的引号可以使用斜杠\转义

  • 打印网页成pdf保存,分辨率还不错

78df4ec04ecff21c5cdd2b04b06c3f3e.png

0d13e29c4fae2cfc19ce4a1cfdd9dbe2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值