Sim-U我的世界模拟城市模组官网 Sim-U我的世界模拟城市模组官网
首页
随笔
    • 视频教程 (opens new window)
    • 使用教程
    • 常见问题
下载中心
赞助
    • 官方频道 (opens new window)
首页
随笔
    • 视频教程 (opens new window)
    • 使用教程
    • 常见问题
下载中心
赞助
    • 官方频道 (opens new window)
npm
  • 给博客添加照片

    • 准备
      • 安装python
        • 博客相册页面
          • 其他配置
          • 随笔
          trhsy
          2018年10月31日17:34:48
          目录

          给博客添加照片

          # 给博客添加照片

          # 准备

          在github创建一个新库名字叫Blog_Album,(名字随便起)本地新建文件名字同样叫Blog_Album,打开Git切换到当前文件夹下执行命令git init创建本地库,然后再次执行git remote add origin 你Github仓库ssh地址

          # 安装python

          下载地址 (opens new window) 下载安装后打开cmd,切换都python安装目录下Scripts\我的地址D:\work\Python\Python37\Scripts 之后执行

          easy_install-3.7.exe pip
          pip install pillow 
          

          本地新建的Blog_Album文件下新建一个文件夹/photos,和min_photos文件夹,并且再Blog_Album下新建tool.py文件 代码如下:

          #coding: utf-8
          from PIL import Image
          import os
          import sys
          import json
          from datetime import datetime
          from Imageprocessing import Graphics
          
          # 定义压缩比,数值越大,压缩越小
          SIZE_normal = 1.0
          SIZE_small = 1.5
          SIZE_more_small = 2.0
          SIZE_more_small_small = 3.0
          
          
          def make_directory(directory):
              """创建目录"""
              os.makedirs(directory)
          
          def directory_exists(directory):
              """判断目录是否存在"""
              if os.path.exists(directory):
                  return True
              else:
                  return False
          
          def list_img_file(directory):
              """列出目录下所有文件,并筛选出图片文件列表返回"""
              old_list = os.listdir(directory)
              # print old_list
              new_list = []
              for filename in old_list:
                  name, fileformat = filename.split(".")
                  if fileformat.lower() == "jpg" or fileformat.lower() == "png" or fileformat.lower() == "gif":
                      new_list.append(filename)
              # print new_list
              return new_list
          
          
          def print_help():
              print("""
              This program helps compress many image files
              you can choose which scale you want to compress your img(jpg/png/etc)
              1) normal compress(4M to 1M around)
              2) small compress(4M to 500K around)
              3) smaller compress(4M to 300K around)
              """)
          
          def compress(choose, des_dir, src_dir, file_list):
              """压缩算法,img.thumbnail对图片进行压缩,
              
              参数
              -----------
              choose: str
                      选择压缩的比例,有4个选项,越大压缩后的图片越小
              """
              if choose == '1':
                  scale = SIZE_normal
              if choose == '2':
                  scale = SIZE_small
              if choose == '3':
                  scale = SIZE_more_small
              if choose == '4':
                  scale = SIZE_more_small_small
              for infile in file_list:
                  img = Image.open(src_dir+infile)
                  # size_of_file = os.path.getsize(infile)
                  w, h = img.size
                  img.thumbnail((int(w/scale), int(h/scale)))
                  img.save(des_dir + infile)
          def compress_photo():
              '''调用压缩图片的函数
              '''
              src_dir, des_dir = "photos/", "min_photos/"
              
              if directory_exists(src_dir):
                  if not directory_exists(src_dir):
                      make_directory(src_dir)
                  # business logic
                  file_list_src = list_img_file(src_dir)
              if directory_exists(des_dir):
                  if not directory_exists(des_dir):
                      make_directory(des_dir)
                  file_list_des = list_img_file(des_dir)
                  # print file_list
              '''如果已经压缩了,就不再压缩'''
              for i in range(len(file_list_des)):
                  if file_list_des[i] in file_list_src:
                      file_list_src.remove(file_list_des[i])
              compress('4', des_dir, src_dir, file_list_src)
          
          
          def handle_photo():
              '''根据图片的文件名处理成需要的json格式的数据
              
              -----------
              最后将data.json文件存到博客的source/photos文件夹下
              '''
              src_dir, des_dir = "photos/", "min_photos/"
              file_list = list_img_file(src_dir)
              list_info = []
              for i in range(len(file_list)):
                  filename = file_list[i]
                  date_str, *info = filename.split("_")
                  info='_'.join(info)
                  info, _ = info.split(".")
                  date = datetime.strptime(date_str, "%Y-%m-%d")
                  year_month = date_str[0:7]            
                  if i == 0:  # 处理第一个文件
                      new_dict = {"date": year_month, "arr":{'year': date.year,
                                                                             'month': date.month,
                                                                             'link': [filename],
                                                                             'text': [info],
                                                                             'type': ['image']
                                                                             }
                                                  } 
                      list_info.append(new_dict)
                  elif year_month != list_info[-1]['date']:  # 不是最后的一个日期,就新建一个dict
                      new_dict = {"date": year_month, "arr":{'year': date.year,
                                                             'month': date.month,
                                                             'link': [filename],
                                                             'text': [info],
                                                             'type': ['image']
                                                             }
                                  }
                      list_info.append(new_dict)
                  else:  # 同一个日期
                      list_info[-1]['arr']['link'].append(filename)
                      list_info[-1]['arr']['text'].append(info)
                      list_info[-1]['arr']['type'].append('image')
              list_info.reverse()  # 翻转
              final_dict = {"list": list_info}
              with open("F:/项目/个人微博/love/themes/next/source/lib/album/data.json","w") as fp:
                  json.dump(final_dict, fp)
          def cut_photo():
              """裁剪算法
              
              ----------
              调用Graphics类中的裁剪算法,将src_dir目录下的文件进行裁剪(裁剪成正方形)
              """
              src_dir = "photos/"
              if directory_exists(src_dir):
                  if not directory_exists(src_dir):
                      make_directory(src_dir)
                  # business logic
                  file_list = list_img_file(src_dir)
                  # print file_list
                  if file_list:
                      print_help()
                      for infile in file_list:
                          img = Image.open(src_dir+infile)
                          Graphics(infile=src_dir+infile, outfile=src_dir + infile).cut_by_ratio()            
                  else:
                      pass
              else:
                  print("source directory not exist!")     
          
          
          
          def git_operation():
              
              os.system('git add --all')
              os.system('git commit -m "add photos"')
              os.system('git push origin master')
          
          # if __name__ == "__main__":
          #     cut_photo()        # 裁剪图片,裁剪成正方形,去中间部分
          #     compress_photo()   # 压缩图片,并保存到mini_photos文件夹下
          #     git_operation()    # 提交到github仓库
          #     handle_photo()     # 将文件处理成json格式,存到博客仓库中
          cut_photo()        # 裁剪图片,裁剪成正方形,去中间部分
          compress_photo()   # 压缩图片,并保存到mini_photos文件夹下
          git_operation()    # 提交到github仓库
          handle_photo()     # 将文件处理成json格式,存到博客仓库中   
          

          另外新建一个文件Imageprocessing.py,存放到python安装位置Python\Python35-32\Lib\site-packages下 代码如下:

          # coding=utf-8  
          from PIL import Image  
          import shutil  
          import os  
          
          class Graphics:  
              '''图片处理类
              
              参数
              -------
              infile: 输入文件路径
              outfile: 输出文件路径
              '''
              def __init__(self, infile, outfile):
                  self.infile = infile
                  self.outfile = outfile
          
              def fixed_size(self, width, height):  
                  """按照固定尺寸处理图片"""  
                  im = Image.open(self.infile)  
                  out = im.resize((width, height),Image.ANTIALIAS)  
                  out.save(self.outfile)  
          
          
              def resize_by_width(self, w_divide_h):  
                  """按照宽度进行所需比例缩放"""  
                  im = Image.open(self.infile)  
                  (x, y) = im.size   
                  x_s = x  
                  y_s = x/w_divide_h  
                  out = im.resize((x_s, y_s), Image.ANTIALIAS)   
                  out.save(self.outfile)  
          
          
              def resize_by_height(self, w_divide_h):  
                  """按照高度进行所需比例缩放"""  
                  im = Image.open(self.infile)  
                  (x, y) = im.size   
                  x_s = y*w_divide_h  
                  y_s = y  
                  out = im.resize((x_s, y_s), Image.ANTIALIAS)   
                  out.save(self.outfile)  
          
          
              def resize_by_size(self, size):  
                  """按照生成图片文件大小进行处理(单位KB)"""  
                  size *= 1024  
                  im = Image.open(self.infile)  
                  size_tmp = os.path.getsize(self.infile)  
                  q = 100  
                  while size_tmp > size and q > 0:  
                      print (q)  
                      out = im.resize(im.size, Image.ANTIALIAS)  
                      out.save(self.outfile, quality=q)  
                      size_tmp = os.path.getsize(self.outfile)  
                      q -= 5  
                  if q == 100:  
                      shutil.copy(self.infile, self.outfile)  
          
            
              def cut_by_ratio(self):  
                  """按照图片长宽进行分割
                  
                  ------------
                  取中间的部分,裁剪成正方形
                  """  
                  im = Image.open(self.infile)  
                  (x, y) = im.size  
                  if x > y:  
                      region = (int(x/2-y/2), 0, int(x/2+y/2), y)  
                      #裁切图片  
                      crop_img = im.crop(region)  
                      #保存裁切后的图片  
                      crop_img.save(self.outfile)             
                  elif x < y:  
                      region = (0, int(y/2-x/2), x, int(y/2+x/2))
                      #裁切图片  
                      crop_img = im.crop(region)  
                      #保存裁切后的图片  
                      crop_img.save(self.outfile)  
          

          此外图片名字命名方式以YYYY-MM-DD_描述.jpg,时间年月日描述; 上面一切的操作为的是图片处理 完了在cmd中切换到你Blog_Album文件下执行命令python tool.py F:\项目\个人微博\Blog_Album\photos 就是你刚刚创建的文件下 执行前请修改data.json存放位置,大约在133行

          with open("F:/项目/个人微博/love/themes/next/source/lib/album/data.json","w") as fp:
          修改为
          with open("你的博客项目地址/themes/next/source/lib/album/data.json","w") as fp:
          

          # 博客相册页面

          在博客项目跟目录下执行hexo n page photos,并再主题配置_config.yml文件中menu选项中添加photos

          menu:
            home: / || home
            #about: /about/ || user
            tags: /tags/ || tags
            categories: /categories/ || th
            archives: /archives/ || archive
            photos: /photos  || camera
            #top: /top/ || signal
            #schedule: /schedule/ || calendar
            #sitemap: /sitemap.xml || sitemap
            #commonweal: /404/ || heartbeat
          

          在photos中的index.md添加代码

          ---
          title: 照片
          date: 2018年10月31日17:34:48
          tags: photos
          type: "photos"
          categories: photos
          copyright: true
          comments: true
          fancybox: false
          ---
          <link rel="stylesheet" href="../lib/album/ins.css">
          <link rel="stylesheet" href="../lib/album/photoswipe.css"> 
          <link rel="stylesheet" href="../lib/album/default-skin/default-skin.css"> 
          <div class="photos-btn-wrap">
            <a class="photos-btn active" href="javascript:void(0)" target="_blank" rel="external">Photos</a>
          </div>
          <div class="instagram itemscope">
            <a href="http://yourbolg.com" target="_blank" class="open-ins">图片正在加载中…</a>
          </div>
           
          <script>
            (function() {
              var loadScript = function(path) {
                var $script = document.createElement('script')
                document.getElementsByTagName('body')[0].appendChild($script)
                $script.setAttribute('src', path)
              }
              setTimeout(function() {
                  loadScript('../lib/album/ins.js')
              }, 0)
            })()
          </script>
          

          上述的css&js文件从这里下载 (opens new window) 把相应为文件拷贝到相应的位置,photoswipe-ui-default.min.js, photoswipe.min.js俩文件放到themes/next/source/js/src中。 对于ins.js修改,大概在121行左右就是你自己的github中的链接

          var minSrc = 'https://github.com/123love123/my_album/tree/master/min_photos' + data.link[i];
          			
          var src = 'https://github.com/123love123/my_album/tree/master/photos/' + data.link[i];
          

          修改成你的地址就行

          # 其他配置

          next/layout/_layout.swig的头部head前添加对js文件下修改

          <script src="{{ url_for(theme.js) }}/src/photoswipe.min.js?v={{ theme.version }}"></script>
          <script src="{{ url_for(theme.js) }}/src/photoswipe-ui-default.min.js?v={{ theme.version }}"></script>
          

          body中

          
          {% if page.type === "photos" %}
            <!-- Root element of PhotoSwipe. Must have class pswp. -->
            <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
              <div class="pswp__bg"></div>
              <div class="pswp__scroll-wrap">
                  <div class="pswp__container">
                      <div class="pswp__item"></div>
                      <div class="pswp__item"></div>
                      <div class="pswp__item"></div>
                  </div>
                  <div class="pswp__ui pswp__ui--hidden">
                      <div class="pswp__top-bar">
                          <div class="pswp__counter"></div>
                          <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
                          <button class="pswp__button pswp__button--share" title="Share"></button>
                          <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
                          <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
                          <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                          <!-- element will get class pswp__preloader--active when preloader is running -->
                          <div class="pswp__preloader">
                              <div class="pswp__preloader__icn">
                                <div class="pswp__preloader__cut">
                                  <div class="pswp__preloader__donut"></div>
                                </div>
                              </div>
                          </div>
                      </div>
                      <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                          <div class="pswp__share-tooltip"></div> 
                      </div>
                      <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
                      </button>
                      <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
                      </button>
                      <div class="pswp__caption">
                          <div class="pswp__caption__center"></div>
                      </div>
                  </div>
              </div>
            </div>
          {% endif %}
          

          在/themes/next/layout/_scripts/pages/post-details.swig中

          <script type="text/javascript" src="{{ url_for(theme.js) }}/src/photoswipe.min.js?v={{ theme.version }}"></script>
          <script type="text/javascript" src="{{ url_for(theme.js) }}/src/photoswipe-ui-default.min.js?v={{ theme.version }}"></script>
          
          

          主题配置文件中fancybox设置true,修改/themes/next/layout/_partials/head.swig 在

          {% if theme.fancybox %}
            {% set fancybox_css_uri = url_for(theme.vendors._internal + '/fancybox/source/jquery.fancybox.css?v=2.1.5') %}
            {% if theme.vendors.fancybox_css %}
              {% set fancybox_css_uri = theme.vendors.fancybox_css %}
            {% endif %}
            <link href="{{ fancybox_css_uri }}" rel="stylesheet" type="text/css" />
          {% endif %}
          

          上方加入

          {% if page.type === "photos"  %}
            {% set theme.fancybox = false %}
          {% endif %}
          {% if page.type !== "photos"  %}
            {% set theme.fancybox = true %}
          {% endif %}
          

          如果本文对您有所帮助,请打赏给我吧,我先送个你也红包往下看,你可以把扫到红包打赏个我哦! 红包

          上次更新: 2022/12/05, 09:12:57
          Theme by Vdoing | Copyright © 2022-2025 Sim-U | By Trhsy
          • 跟随系统
          • 浅色模式
          • 深色模式
          • 阅读模式