arcpy工作中实现自动截图

arcpy工作中实现自动截图,减少手动截图烦恼,并加上文字

实现根据已经保存设置好的功能实现自动按照图斑设置大小进行截图,需保存设置好label的mxd文件。

代码1(截图使用arcgis10.2自带的python2.7与arcpy库)

截图.

# -*- coding:utf-8 -*-
"""
实现arcpy按照图斑自动截图,要使用python2.7,需要提前设置好mxd工程,并进行保存,如果进行前后时相截图,需要设置好label与所需季度影像
"""
import arcpy


#截图地图文件路径
input = "F:\python_trian\\tb_tuitiantu.shp"
mxd_path = "F:\python_trian\water.mxd"
mxd = arcpy.mapping.MapDocument(mxd_path)#通过MapDocument函数来引用地图文档
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]#返回名为Layers的数据框对象
for lyr in arcpy.mapping.ListLayers(mxd): #遍历地图文档的图层
    if lyr.name.startswith("tb"):#指定图层文件,搜索为tb开头的文件夹,startwith函数用于检查字符串是否已指定字符串为开头,正确返回Trur,错误返回False。
        layermain = lyr#主要图层指定为layermain


#输出lyr.name10(输出指定图层的名称(需要截图图层))
print "Layer name: " + layermain.name

#循环
fields = ['FID']#根据field这个字段进行截图,field必须为唯一字段
values1 = [row[0] for row in arcpy.da.SearchCursor(input, fields)]#使用游标访问其中的字段,返回已fields字段的列表
print values1
#清空选择
arcpy.SelectLayerByAttribute_management(layermain, "CLEAR_SELECTION")#按属性选择图层工具,选择要素与行,并移除所有选择内容
arcpy.RefreshActiveView()#刷新当前的地图文档的活动视图和内容列表

delimfield = arcpy.AddFieldDelimiters(input, 'FID')#生成相应的sql语句
print delimfield

#循环
for val in values1:#遍历字段列表
    try:
        whereClause = delimfield+'='+str(val)#whereClause为"BSM=val"字符串
        print "whereclause"
        print whereClause
        print type(whereClause)
        arcpy.SelectLayerByAttribute_management(layermain, "NEW_SELECTION", whereClause)#按属性选择图层,创建一个新的选择内容,默认选择方式为后边字符串
        df.zoomToSelectedFeatures()#缩放至图层,按照当前图斑缩放
        df.scale = df.scale*2.5#图版按位置缩放距离图片边界3倍位置,根据图斑大小进行调节
        save_path = "F:\python_trian\jietuchengguo2019\\"+str(val)+".png"#保存图片为png格式路径

        arcpy.mapping.ExportToPNG(mxd,save_path)#按照val为文件名称进行保存,保存格式为PNG格式
        arcpy.SelectLayerByAttribute_management(layermain, "CLEAR_SELECTION")#按照属性选择图层,并移除所有选择内容
        arcpy.RefreshActiveView()#刷新当前活动视图和内容列表
    except:
        print 'wrong'
del mxd
print "Beautiful!"

代码2(python3)

处理图像白边与图像形状.

#coding=utf-8
"""
影像去白边,按照宽度裁切,使用python3.6
"""
from PIL import Image
import matplotlib.pyplot as plt
import os
import numpy as np
import cv2
import PIL.Image as img
from PIL import ImageFilter
from PIL import ImageEnhance
from PIL import ImageDraw, ImageFont

input_path = "F:\python_trian\jietuchengguo2019"#指定文件夹内的jpg文件进行裁切
out_put = "F:\python_trian\output_chengguo_2019"#指定裁切以后文件jpg保存文件夹


def tra_jpg(path):#遍历路径文件夹内jpg格式的文件,返回以jpg格式文件的绝对路径列表
    f =[]
    for root, dirs, files in os.walk(path):
        for file in files:
            if os.path.splitext(file)[1] == '.png':
                t = os.path.join(root,file)
                f.append(t)
    return f


def img_array(path):#把jpg文件变为数组格式
    a = cv2.imread(path)
    print(a.shape)
    return a


def corp_margin(img):#图片去除白边,输出numpy的array格式,输出array格式
    img2 = img.sum(axis=2)
    (row, col) = img2.shape
    row_top = 0
    raw_down = 0
    col_top = 0
    col_down = 0
    for r in range(0, row):
        if img2.sum(axis=1)[r] < 700 * col:
            row_top = r
            break

    for r in range(row - 1, 0, -1):
        if img2.sum(axis=1)[r] < 700 * col:
            raw_down = r
            break

    for c in range(0, col):
        if img2.sum(axis=0)[c] < 700 * row:
            col_top = c
            break

    for c in range(col - 1, 0, -1):
        if img2.sum(axis=0)[c] < 700 * row:
            col_down = c
            break

    new_img = img[row_top:raw_down + 1, col_top:col_down + 1, 0:3]
    return new_img



def anzhao_w_clip(img):#按照图片宽度对图片进行裁切,把长方形图片按照宽度裁切为正方形,以质点为中心
    h = img.shape[0]
    w = img.shape[1]
    l = int((h-w)/2) #向上和向下裁切的尺寸
    #array进行截取,把长方形截取为正方形
    clip_photo = img[l:, :, :]
    clip_photo = clip_photo[:-l, :, :]
    print(clip_photo.shape)
    return clip_photo



def save_photo(array, output_path):#把array数组保存在指点文件夹中
    cv2.imwrite(output_path, array)


def clip_str(path):#按照路径划分字符串
    s = path.split('\\')
    return s[-1]

def photo_join_wenji(img_path):#给图片的左上角添加文字,如“2019s4”,未使用
    im = img.open(img_path)
    draw = ImageDraw.Draw(im)
    fnt1= ImageFont.truetype(r'C:\Windows\Fonts\STXINGKA.TTF',50)#定义字体与字号fnt1
    fnt2 = ImageFont.truetype(r'C:\Windows\Fonts\STHUPO.TTF', 50)#定义字体与字号fnt2
    draw.text((50, 50),u'2020', fill='red',font=fnt1)#写入文字位于(5050)位置,位于图片的左上角
    im.save("F:\python_trian\output_chengguo\chushi.png")#对图片进行保存

#定义主函数
if __name__ =="__main__":
    paths = tra_jpg(input_path)#形成指定文件路径内jpg文件的绝对路径列表
    for path in paths:#遍历文件路径列表
        img = img_array(path)#形成图像文件的数组
        n_img = corp_margin(img)#图片去除白边,输出numpy的array格式,输出array格式
        c_img = anzhao_w_clip(n_img)#按宽度裁切为正方形
        save_photo_path = out_put + '\\'+clip_str(path)#文件输出路径,指定裁切以后文件jpg保存文件夹
        cv2.imwrite(save_photo_path, c_img)

代码3(python3)

图片加文字.

#coding=utf-8
"""
在右上角加上指定文字,使用python3.6
"""
from PIL import Image
import matplotlib.pyplot as plt
import os
import numpy as np
import cv2
import PIL.Image as img
from PIL import ImageFilter
from PIL import ImageEnhance
from PIL import ImageDraw, ImageFont
import os.path

input_path = "F:\python_trian\\tuitiantu_jietu\\2019"#输入文件夹,文件夹内包含图片png文件
out_puth = "F:\python_trian\\tuitiantu_jietu\\2019_wenzi"#图片左上角填加完文字后输出png的文件夹

def getfiles(dir, suffix):#返回png图片的路径列表
    res = []
    for root, directory, files in os.walk(dir):
        for filename in files:
            name, suf = os.path.splitext(filename)
            if suf == suffix:
                res.append(os.path.join(root, filename))
    return res

def photo_join_wenji(img_path,output_path):#给图片的左上角添加文字,如“2019s4”
    im = img.open(img_path)
    draw = ImageDraw.Draw(im)
    fnt1= ImageFont.truetype(r'F:\pythonku\simhei.ttf',50)#定义字体与字号fnt1
    fnt2 = ImageFont.truetype(r'C:\Windows\Fonts\STHUPO.TTF', 50)#定义字体与字号fnt2
    draw.text((50, 50),u'2019s4', fill='red',font=fnt1)#写入文字位于(5050)位置,位于图片的左上角
    str1 = os.path.basename(img_path)
    print(str1)
    name = str1.split('.')
    name = name[0]
    print(name)
    out = output_path+"\\"+ str(name) +".png"
    print(out)
    im.save(out)#对图片进行保存
#定义主函数
if __name__ =="__main__":
    list_path = getfiles(input_path, '.png')
    print(list_path)
    for i in list_path:
        photo_join_wenji(i, out_puth)

很懒,没合在一起,用起来也超级简单,那个字体文件大家可以网上自己找。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值