IOS - 查找未使用的图片

实现细节都在代码里面, 帮助 -h.

# -*- coding: utf-8 -*-
"""
检查IOS应用图片是否使用

1. 读取有效文件: 图片(.png, .jpg), 文件(.h, .m, .xib, .c, .cpp, .json);
2. 在文件中搜索图片, 去掉后缀符和@2x, 适应字符串拼接, 舍弃最后‘_‘‘-‘之后的部分;

注意: 会遗漏字符串拼接的情况, 如a_b_%zi_c_d, 需要检查之后再删除.

时间复杂度O(n^2)-find, 每个文件查找每个图片;
"""

__author__ = ‘C.L.Wang‘

import os
import sys
import getopt

# 列出文件夹内所有图片
def list_dictionary_images(root_dir):
    names_list = []
    paths_list = []
    for parent, dirNames, fileNames in os.walk(root_dir):
        for name in fileNames:
            ext = [‘.png‘, ‘.jpg‘]
            if name.endswith(tuple(ext)):
                names_list.append(name)
                paths_list.append(os.path.join(parent, name))
    return [paths_list, names_list]

# 列出文件夹内所有代码
def list_dictionary_codes(root_dir):
    paths_list = []
    for parent, dirNames, fileNames in os.walk(root_dir):
        for name in fileNames:
            ext = [‘.h‘, ‘.m‘, ‘.xib‘, ‘.json‘, ‘.c‘, ‘.cpp‘, ‘.mm‘, ‘.md‘]
            if name.endswith(tuple(ext)):
                paths_list.append(os.path.join(parent, name))
    return paths_list

# 在文件中查找名称
def search_name_in_file(search_name, file_name):
    # 拼接字符串特例
    short_name_1 = search_name[::-1].split(‘_‘, 1)
    short_name_2 = search_name[::-1].split(‘-‘, 1)
    if len(short_name_1) == 2:
        search_name = short_name_1[1][::-1]
    elif len(short_name_2) == 2:
        search_name = short_name_2[1][::-1]
    # 引用图像特例
    search_name = ‘"‘ + search_name
    file_object = open(file_name)
    try:
        all_the_text = file_object.read()
        if all_the_text.find(search_name) > 0:
            return True
        else:
            return False
    finally:
        file_object.close()

# 规范化名称
def normalize_name(raw_name):
    raw_name = raw_name.replace(‘@2x‘, ‘‘)
    raw_name = raw_name.replace(‘.png‘, ‘‘)
    raw_name = raw_name.replace(‘.jpg‘, ‘‘)
    return raw_name

# 列出文件中未出现的名称
def list_unused_names(names_dict, file_name):
    for name, path in names_dict.items():
        if search_name_in_file(normalize_name(name), file_name):
            del names_dict[name]
    return names_dict

# 查找未使用的图片
def search_unused_images(image_folder, file_folder):
    [image_paths, image_names] = list_dictionary_images(image_folder)
    file_paths = list_dictionary_codes(file_folder)
    images_dict = dict(zip(image_names, image_paths))
    for file_path in file_paths:
        images_dict = list_unused_names(images_dict, file_path)
    return images_dict

def main(argv):
    image_dir = ‘‘  # 图片文件夹
    code_dir = ‘‘  # 代码文件夹
    out_put = ‘‘  # 输出文件
    result = list()

    try:
        opts, args = getopt.getopt(argv, "hi:c:o:", ["image_dir=", "code_dir=", "out_put="])
    except getopt.GetoptError:
        print ‘SearchUnusedImages.py -i <image_dir> -c <code_dir> -o <out_put>‘
        sys.exit(2)

    for opt, arg in opts:
        if opt == ‘-h‘:
            print ‘SearchUnusedImages.py -i <image_dir> -c <code_dir> -o <out_put>‘
            sys.exit()
        elif opt in ("-i", "--image_dir"):
            image_dir = arg
        elif opt in ("-c", "--code_dir"):
            code_dir = arg
        elif opt in ("-o", "--out_put"):
            out_put = arg

    out_file = open(out_put, ‘w‘)
    print ‘scan start.‘
    for name, path in search_unused_images(image_dir, code_dir).items():
        result.append(path)
    for sort_path in sorted(result):
        print >> out_file, sort_path
    print ‘scan over.‘
    out_file.close()

if __name__ == "__main__":
    main(sys.argv[1:])

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-12 05:37:53

IOS - 查找未使用的图片的相关文章

iOS 下的相册与图片处理

iOS 下的相册与图片处理 需求 很多公司项目中都会使用到相册,以及相机,保存图片,从相册中选取图片等等操作.本文将详细介绍该功能如何实现优化,以及使用一些优秀的第三方库来辅助完成我们的需求. photos framework 的使用 Photos Framework reference Classes PHAdjustmentData /* When a user edits an asset, Photos saves a PHAdjustmentData object along with

ios SDImageCache 清除所有缓存图片

我觉得奇怪,用官方给的下面方法就怎么也删除不了 [[SDImageCache sharedImageCache] clearDisk]; [[SDImageCache sharedImageCache] clearMemory]; 哎,干脆自己写个,反正很简单: #pragma mark 删除全部缓存图片 - (void)removeAllCacheImage { NSFileManager *fileManager = [NSFileManager defaultManager]; if ([

ios之应用程序启动图片

ios之应用程序启动图片,布布扣,bubuko.com

ios:设置视图背景图片的方法

1. 使用一个UIImageView实例做子视图,并且放最后面UIImageView *customBackgournd = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.jpg"]];self.background = customBackground;[customBackground release]; [self addSubview:background];[self sendSubVie

ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直接从应用程序访问,只能通过终端用户去选择和使用相册图片 应用程序包 应用程序包可能会将图像与可执行程序.Info.plist文件和其他资源一同存储.我们可以通过本地文件路径来读取这些基于包的图像并在应用程序中显示它们. 沙盒 借助沙盒,我们可以把图片存储到Documents.Library.tmp文

【iOS】网络加载图片缓存与SDWebImage

加载网络图片可以说是网络应用中必备的.如果单纯的去下载图片,而不去做多线程.缓存等技术去优化,加载图片时的效果与用户体验就会很差. 一.自己实现加载图片的方法 tips: *iOS中所有网络访问都是异步的.(自己开线程去下载) *普通为模型增加UIImage属性的方法做的是内存缓存(下次启动还需要从网络重新加载), 而要做本地缓存的话,还要自己手动存储网络上下载的图片. *为了加快访问, 还需要自己去弄缓存.(内存缓存或者本地缓存) *当图片没有下载完成时,还要设置占位图片. 以下代码用NSOp

iOS开发-自定义后台显示图片(iOS7-Background Fetch的应用)

之前在用电池医生的时候, 发现它有这样一个功能:当应用进入后台的时候, 会显示另外一张图片覆盖App Switcher显示的界面. 效果如下: 变成----> 而这样的一个功能, 对于保护用户隐私还是挺有用的. 这就涉及到了Background Fetch的使用.当然, Background Fetch有更多,更有用的功能, 详见-->iOS 7学习:多任务处理之Background Fetch 下面就介绍下后台图片切换的实现. 1.程序配置后台模式 操作如下: 2. AppDelegate.

IOS多选单选相册图片

IOS多选单选相册图片 之前做项目让实现多选相册的图片,自己写了一个demo一直保存在电脑上,今天下午发现电脑128G的容量已经快没有了,准备清理电脑,所以把之前做的一些demo放在博客上,以后方便用. 1.首先准备3个图片 2.定义单元格PhoCollectionViewCell #import <UIKit/UIKit.h> typedef void(^SelectBtnClickBlock) (BOOL isSelect); @interface PhoCollectionViewCel

ios UITableView 异步加载图片并防止错位

UITableView 重用 UITableViewCell 并异步加载图片时会出现图片错乱的情况 对错位原因不明白的同学请参考我的另外一篇随笔:http://www.cnblogs.com/lesliefang/p/3619223.html . 当然大多数情况下可以用 SDWebImage, 这个库功能强大,封装的很好.但自己重头来写可能对问题理解的更深. SDWebImage 有点复杂,很多人也会参考一下封装出一套适合自己的类库. 基本思路如下: 1 扩展(category) UIImage