获取ipa文件内的所有图片素材

第一步:
           将所需的ipa文件下载到PC上,将后缀名改为zip

第二步:
          将zip解压缩后,有一个Payload文件夹,该文件夹下有一个app文件

第三步:
          右键该app文件,选择显示包内容

第四步:
         将所需的png图片文件全部copy出来,放在一个新建的文件夹中
         注:该文件夹路径最好是全英文

第五步:

 ipin.py 下载

        将ipin.py文件放入刚刚那个新建的文件夹中

第六步:
        运行终端,先找到该新建文件夹

第七步:
      输入  python ipin.py 回车
      回答 Y

第八步:
      你可以看到,你新建文件夹中原来不能预览的png图片现在已经全部可以正常显示了



使用方法:

1、把ipin.py放到要恢复的.png图片一个目录里

2、打开终端,cd到此目录。

3、输入 python ipin.py  

4、根据提示信息输入 Y,回车。这样就能把图片还原到可以查看了。


/**ipin.py**/

#---

# iPIN - iPhone PNG Images Normalizer v1.0

# Copyright (C) 2007

#

# Author:

#  Axel E. Brzostowski

http://www.axelbrz.com.ar/

axelbrz@gmail.com

# References:

http://iphone.fiveforty.net/wiki/index.php/PNG_Images

http://www.libpng.org/pub/png/spec/1.2/PNG-Contents.html

# This program is free software: you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by

# the Free Software Foundation, either version 3 of the License.

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

# GNU General Public License for more details.

#---


from structimport *

from zlib import *

import stat

import sys

import os


def getNormalizedPNG(filename):

    pngheader = "\x89PNG\r\n\x1a\n"

    

    file = open(filename,"rb")

    oldPNG = file.read()

    file.close()


   if oldPNG[:8] != pngheader:

        return None

    

    newPNG = oldPNG[:8]

    

    chunkPos = len(newPNG)

    

    # For each chunk in the PNG file    

   while chunkPos < len(oldPNG):

        

        # Reading chunk

        chunkLength = oldPNG[chunkPos:chunkPos+4]

        chunkLength = unpack(">L", chunkLength)[0]

        chunkType = oldPNG[chunkPos+4 : chunkPos+8]

        chunkData = oldPNG[chunkPos+8:chunkPos+8+chunkLength]

        chunkCRC = oldPNG[chunkPos+chunkLength+8:chunkPos+chunkLength+12]

        chunkCRC = unpack(">L", chunkCRC)[0]

        chunkPos += chunkLength +12


        # Parsing the header chunk

       if chunkType == "IHDR":

            width = unpack(">L", chunkData[0:4])[0]

            height = unpack(">L", chunkData[4:8])[0]


        # Parsing the image chunk

       if chunkType == "IDAT":

           try:

                # Uncompressing the image chunk

                bufSize = width * height *4 + height

                chunkData = decompress( chunkData,-8, bufSize)

                

           except Exception, e:

                # The PNG image is normalized

               return None


            # Swapping red & blue bytes for each pixel

            newdata =""

           for y in xrange(height):

                i = len(newdata)

                newdata += chunkData[i]

               for x in xrange(width):

                    i = len(newdata)

                    newdata += chunkData[i+2]

                    newdata += chunkData[i+1]

                    newdata += chunkData[i+0]

                    newdata += chunkData[i+3]


            # Compressing the image chunk

            chunkData = newdata

            chunkData = compress( chunkData )

            chunkLength = len( chunkData )

            chunkCRC = crc32(chunkType)

            chunkCRC = crc32(chunkData, chunkCRC)

            chunkCRC = (chunkCRC +0x100000000) % 0x100000000


        # Removing CgBI chunk        

       if chunkType != "CgBI":

            newPNG += pack(">L", chunkLength)

            newPNG += chunkType

           if chunkLength > 0:

                newPNG += chunkData

            newPNG += pack(">L", chunkCRC)


        # Stopping the PNG file parsing

       if chunkType == "IEND":

           break

        

   return newPNG


def updatePNG(filename):

    data = getNormalizedPNG(filename)

   if data != None:

        file = open(filename,"wb")

        file.write(data)

        file.close()

       return True

   return data


def getFiles(base):

   global _dirs

   global _pngs

   if base == ".":

        _dirs = []

        _pngs = []

        

   if base in _dirs:

       return


    files = os.listdir(base)

   for file in files:

        filepath = os.path.join(base, file)

       try:

            st = os.lstat(filepath)

       except os.error:

           continue

        

       if stat.S_ISDIR(st.st_mode):

           if not filepathin _dirs:

                getFiles(filepath)

                _dirs.append( filepath )

                

       elif file[-4:].lower() ==".png":

           if not filepathin _pngs:

                _pngs.append( filepath )

            

   if base == ".":

       return _dirs, _pngs


print "-----------------------------------"

print " iPhone PNG Images Normalizer v1.0"

print "-----------------------------------"

print " "

print "[+] Searching PNG files...",

dirs, pngs = getFiles(".")

print "ok"


if len(pngs) ==0:

   print " "

    print"[!] Alert: There are no PNG files found. Move this python file to the folder that contains the PNG files to normalize."

    exit()

    

print " "

print " -  %d PNG files were found at this folder (and subfolders)." % len(pngs)

print " "

while True:

    normalize = raw_input("[?] Do you want to normalize all images (Y/N)? ").lower()

   if len(normalize) > 0 and (normalize[0] =="y" or normalize[0] =="n"):

       break


normalized =0

if normalize[0] =="y":

   for ipng in xrange(len(pngs)):

        perc = (float(ipng) / len(pngs)) *100.0

       print "%.2f%% %s" % (perc, pngs[ipng])

       if updatePNG(pngs[ipng]):

            normalized +=1

print " "

print "[+] %d PNG files were normalized." % normalized





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值