파 이 썬 으로 3 일 만 에 10 억 이 깨 진'나 는 약 신 이 아니다'를 분석 한 신 은 어디 에 있 을 까?

도독:'나 는 약 신 이 아니다'는 문목 야 감독,서 산,왕 전 군,주변,담 탁,장 우,양 신명 등 이 주연 을 맡 은 코미디 영화 로 2018 년 7 월 6 일 중국 에서 상영 되 었 다.
640?wx_fmt=png
영 화 는 개봉 전 대규모 상영 으로 상당 한 인기 와 입 소문 을 모 았 다.7 월 9 일 새벽 까지 콩잎 평 점:9.0 점,고양이 눈:9.7 점,티켓 팅:9.5 점,타 임 머 신:8.8 점.
왜 나 는 이 세 개의 사 이 트 를 말 합 니까?왜냐하면 우 리 는 오늘 5000+개의 단평 데 이 터 를 여기 서 왔 기 때문에 전문 적 인 데이터 로 더욱 설득력 이 있 습 니 다.
640?wx_fmt=gif
몇 개의 데 이 터 를 종합 하면 5 성 은 이렇게 높 은 것 을 추천 합 니 다.생활 환경 은 진실 이 고 정 서 는 진실 입 니 다.곤경 도 진실 입 니 다.심지어 여주인 공 은 나이 든 미녀 이 고 진실 한 주름 이 있 습 니 다!진실 해야만 몰입 체험 을 가 져 올 수 있다.겉 으로 는 약 을 말 하고,속 으로 는 생명 을 말한다.
약 은 병 을 고 칠 수 있 지만 운명 은 저절로 중국 밑바닥 생명의 고난 과 존엄 에 직면 하고 사회 제도 와 상업 법칙 에 대한 고문 을 피하 지 않 는 다.이것 은 영화 가 중국 현실 에 집착 하 는 관건 이자 대중 들 의 공감 을 불 러 일 으 키 는 핵심 이다.
640?wx_fmt=gif
성세 의 위언 은 희망 을 보 여 준다.이 영 화 는 2018 년 가장 폭발 적 인 화제 가 될 가능성 이 크다.선 불,콩짜개 가 16 년 만 에 처음으로 9.0 점 을 받 은 이유 일 수도 있다.
오늘 우 리 는 5000+개의 데이터 로 어떤 지역,어떤 사람 이 이 영 화 를 좋아 하 는 지 분석 해 보 자.
청 용 은 인도 신 유 를 파 는 소상인 일 뿐 그럭저럭 지 낸다.아버 지 는 혈관종 양 이 급 하 게 수술 을 받 고 입원 할 돈 이 없어 아 내 는 아들 을 데 리 고 외국 으로 이민 을 가 려 고 하 는데 인도 신 유 를 팔 아 번 돈 으로 수도 전기 요금 도 내지 못 하고 곳곳에서 돈 이 필요 하 다.
640?wx_fmt=png
신비 한 남자 여 익 은 청 용 을 찾 아 인도 에서 약 을 대리 구 매 하 는 것 을 도와 달라 고 했다.여 씨 는 혈액 암 을 앓 고 있어 항 암 제 를 장기간 복용 해 치료 해 야 한다.
640?wx_fmt=png
정품 약 인 스위스 그 레 닌 은 매우 비 싸 일반인 들 이 전혀 공급 할 수 없 지만 인도 에 서 는 가짜 제약 인 인도 그 레 닌 의 가격 이 1/20 에 불과 하지만 중국 에 서 는 금지 약 에 속 하고 밀수 가 잡 히 는 것 은 법 적 책임 을 져 야 한다.
커 다란 이익 의 유혹 에 사 혜,신부,노 란 털 이 연이어 등장 하여 약 을 파 는 다섯 사람 이 단체 로 성공 을 거 두 었 고 그 는'약 장수'가 되 었 다.
640?wx_fmt=png
병 든 친구 들 에 게 는 살아 갈 기 회 를 갖 고 청 용 에 게 금 기 를 보 내 며'약 신'이 라 고 불 렀 다.
대리 구 매 한 약 에 문제 가 생 겼 고 가짜 약 장수 인 장 장 림 의 협박 으로 정 용 은 잡 힐 까 봐 약 을 파 는 팀 이 정식으로 해산 되 었 다.
정용 이 가 공장 을 차 렸 는데 여 혜 가 죽 었 다.장 장 림 은 길 을 뛰 어 다 니 며 정용 에 게 첫 번 째 탈바꿈 을 시 켰 다.많은 환자 들 이 먹 을 약이 없 었 다.정용 은 다시 인도 에 가서 약 을 다시 만들어 팔 았 다.
640?wx_fmt=png
경찰 은 가짜 약 장 수 를 엄하게 때 렸 고,장 장 림 은 잡 혔 다.경찰 은 청 용이 은신 처 를 발견 하고 황 모 는 정 용 을 엄호 하기 위해 죽 어 두 번 째 탈바꿈 을 시 켰 다.
배상금 으로 인도 약 을 계속 대리 구 매 하여 아들 을 이민 시 키 고 저녁 에 약 을 팔 아 경찰 에 게 잡 혔 다.3 년 후에 출옥 하여 밖 은 이미 천지 가 바 뀌 었 다.
'나 는 약 신 이 아니다'의 현실 적 의 미 는 영화 자체 보다 크다.많은 사람들 이 이 영 화 를 평가 할 때 모두 가 중국 영화 가 마침내 진실 을 말 하 는 꿈 을 꾸 고 있다.
7 월 9 일 새벽 까지 누적 관객 수 는 13 억 명 을 넘 어 이날 84%가까이 를 차지 했다.
640?wx_fmt=png
어떤 지역 이 더 많은 흥 행 에 기 여 했 는 지 데이터 분석 을 통 해 알 수 있다.
640?wx_fmt=gif
예 를 들 어 이 사진 이 동태 적 으로 전 시 된 상황 에서 가장 많은 기 여 를 한 것 은 베 이 징,상하 이,광저우,2 선 도시 역시 흥 행 에 기여 한 사람 이 되 었 다 는 것 을 알 게 될 것 이다.
640?wx_fmt=png
초상 화 를 보면 중년 이 되 고 기름 진 중년 이 되 며 사람들 은 모두 늙 고 병 들 어 죽 는 것 을 두려워 합 니 다.사람들 은 위아래 의 어려움 을 두려워 합 니 다.사람들 은 모두 생계 를 위해 어 쩔 수 없 이 해 야 할 일이 있 습 니 다.사람들 은 모두 진실 과 선 을 동경 합 니 다.................................................
640?wx_fmt=png
데이터 로 볼 때 보기 좋 고 현실 적 이 며 좋 은 영화,감동 적 이 고 눈물 이 나 며 작품 이 좋 습 니 다.
"지도자 님,제발 가짜 약 을 찾 지 마 세 요.""이 약 은 가짜 인지 아 닌 지 우리 같은 먹 는 사람들 은 아직 모 릅 니까?"
"3 년 동안 정품 약 을 먹 었 더 니 집 이 없어 지고 집 도 망 가 졌어 요.지금 은 가까스로 싼 약이 생 겼 지만,너희들 은 이것 이 가짜 약 이 라 고 말 하지 않 는 다."약 을 먹 지 않 으 면 우 리 는 죽 을 때 까지 기다 릴 수 밖 에 없다."
640?wx_fmt=png
'나 는 약 신 이 아니다'가 찌 른 것 은 모든 사람의 아 픈 점 이다.누가 평생 자신 과 가족 이 아 프 지 않 을 것 이 라 고 보장 할 수 있 겠 는가?
일단 큰 병 에 걸 리 면,걸핏하면 수만 위안 에 달 하 는 비 싼 의약 비 는 일반인 들 로 하여 금 전혀 감당 할 능력 이 없 게 한다.한 사람 이 병 이 나 서 온 가족 이 무 너 지 는 것 은 정말 놀 라 운 말 이 아니다.
다음은 우리 가 기술 로 돌아 가 우리 가 어떻게 얻 은 데 이 터 를 공유 합 니 다.
우선 콩짜개,콩짜개 는 지난해 10 월 부터 데이터 오 르 기 가 전면 금 지 돼 500 개의 데이터 만 방출 됐 고,콩짜개 IP 는 낮 1 분 에 40 회,밤 1 분 에 60 회,제한 횟수 를 초과 하면 IP 를 차단 했다.

import urllib
import requests
from urllibimport request
import time
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win32; x32; rv:54.0) Gecko/20100101 Firefox/54.0',
'Connection': 'keep-alive'}
cookies = 'v=3; iuuid=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; webp=true; ci=1%2C%E5%8C%97%E4%BA%AC; __guid=26581345.3954606544145667000.1530879049181.8303; _lxsdk_cuid=1646f808301c8-0a4e19f5421593-5d4e211f-100200-1646f808302c8; _lxsdk=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; monitor_count=1; _lxsdk_s=16472ee89ec-de2-f91-ed0%7C%7C5; __mta=189118996.1530879050545.1530936763555.1530937843742.18'
def html_prase(url):
r = requests.get(url).content
return r
cookie = {}
for line in cookies.split(';'):
name, value = cookies.strip().split('=', 1)
 cookie[name] = value
def html_prase(url):
r = requests.get(url).content
return r
for iin range(1, 100):
print('     %s ' % i)
try:
url= 'http://m.maoyan.com/mmdb/comments/movie/1200486.json?_v_=yes&offset=%s&' % (
i* 15) 
print(url)
 proxy = html_prase('http://172.17.0.29:5010/get/')..decode('utf-8') #         ,             ,  ID:  
html = requests.get(url=url, cookies=cookie, headers=header,
proxies={"http": "http://{}".format(proxy)}).content
 data = json.loads(html.decode('utf-8'))['cmts']
for item in data:
comment = item['content']
  date = item['time'].split(' ')[0]
  rate = item['score']
  city = item['cityName']
img= item['avatarurl']
print(date, rate, comment, city, )
with open('maoyan_08.txt', 'a', encoding='utf-8') as f:
f.write(date + ',' + str(rate) + ',' + comment + ',' + comment + ',' + city + '
') if img: f = open('C:\\Users\My\Desktop\yaoshen\img\\' + img.split('/')[-1], 'wb') f.write((urllib.request.urlopen(img)).read()) except: continue time.sleep(5 + float(random.randint(1, 100)) / 20)
다른 방식:
(Anyproxy+JS+Python+Monkeyrunner)웹 정적 사이트,앱 애플 리 케 이 션,JS 렌 더 링 데 이 터 를 오 를 수 있 는 동적 사이트 의 데 이 터 를 오 를 수 있 습 니 다.
640?wx_fmt=png
설치 사용,공식 Github 을 확인 하 세 요:
https://github.com/alibaba/anyproxy
JS 코드:

var logMap = {}
var fs = require('fs');
var iconv = require('iconv-lite');
var logger = fs.createWriteStream('./urlLog.log', {
 flags: 'a' // 'a' means appending (old data will be preserved)
})
function logPageFile(url) {
 if (!logMap[url]) {
 logMap[url] = true;
 logger.write(url + '\r
'); } } function postData(post_data, path, cb) { // // Build the post string from an object // var post_data = JSON.stringify({ // 'data': data // }); // An object of options to indicate where to post to var post_options = { host: '127.0.0.1', port: '9999', path: '/' + path, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(post_data) } }; var http = require('http'); // Set up the request var post_req = http.request(post_options, function (res) { res.setEncoding('utf8'); res.on('data', cb); }); logger.write('request post data 1\r
') // post the data post_req.write(post_data); logger.write('request post data 2\r
') post_req.end(); } module.exports = { summary: 'a rule to modify response', * beforeSendResponse(requestDetail, responseDetail) { if (/movie\/1200486/i.test(requestDetail.url)) { logger.write('matched: ' + requestDetail.url + '\r
'); if (responseDetail.response.toString() !== "") { logger.write(responseDetail.response.body.toString()); var post_data = JSON.stringify({ 'url': requestDetail.url, 'body': responseDetail.response.body.toString() }); logger.write("post comment to server -- ext"); postData(post_data, 'douban_comment', function (chunk) { }); } } }, };
AnyProxy 로 JS 코드 불 러 오기:anyproxy-i--rule wxrule.js
서비스 코드 부분:

#!/usr/bin/env python3
import asyncio
import re
import textwrap
import threading
import time
import os
import pymysql
from mysqlmgrimport MysqlMgr
from mongomgrimport MongoManager
from subprocess import call
import requests
from lxmlimport etree
from lxmlimport html
from aiohttp.webimport Application, Response, StreamResponse, run_app
import json
STATE_RUNNING = 1
STATE_IN_TRANSACTION = 2
running_state= 0
run_swipe= True
last_history_time= time.clock()
# A thread to save data to database in background
def insert_to_database(biz, msglist):
try:
for msg in msglist:
print(biz)
print(msg['comm_msg_info']['id'])
mongo_mgr.enqueue_data(msg['comm_msg_info']['id'], biz, msg )
except Exception as e:
print(e)
def save_data(biz, msglist_str):
save_thread= threading.Thread(target=insert_to_database, args=(biz, msglist_str,))
save_thread.setDaemon(True)
save_thread.start()
def swipe_for_next_page():
while run_swipe:
time.sleep(5)
if time.clock() - last_history_time>120:
if running_state== STATE_RUNNING:
reenter()
continue
call(["adb", "shell", "input", "swipe", "400", "1000", "400", "200"])
def reenter():
global running_state
running_state= STATE_IN_TRANSACTION
#            
call(["adb", "shell", "input", "swipe", "0", "400", "400", "400"])
time.sleep(2)
#   "      ",          ,       X   Y
call(["adb", "shell", "input", "tap", "200", "1200"])
time.sleep(2)
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0','Connection':'keep-alive'}
def html_prase(url):
r = requests.get(url,header).content
return html.fromstring(r)
async def report_url(request):
resp = StreamResponse()
 data = await request.json()
url= data['url']
# print("url reported: " + url)
biz = re.findall('__biz=(.*?)\&', url)
if len(biz) == 0:
await resp.prepare(request)
return resp
 biz = biz[0]
print('----------------\r
'+ biz + '\r
----------------\r
') mysql_mgr.enqueue_biz(biz, '') bizs.add(biz) biz = biz.encode('utf8') resp.content_type= 'text/plain' await resp.prepare(request) resp.write(biz) await resp.write_eof() return resp async def intro(request): txt = textwrap.dedent("""\ Type {url}/hello/John {url}/simple or {url}/change_body in browser url bar """).format(url='127.0.0.1:8080') binary = txt.encode('utf8') resp = StreamResponse() resp.content_length= len(binary) resp.content_type= 'text/plain' await resp.prepare(request) resp.write(binary) return resp async def simple(request): return Response(text="Simple answer") async def change_body(request): resp = Response() resp.body= b"Body changed" resp.content_type= 'text/plain' return resp # coding=utf-8 async def app_douban_comment(request): resp = StreamResponse() data = await request.json() global running_state global last_history_time msg_data= json.loads(data['body'])['data']['cts'] for item in msg_data: comment = item['ce'].strip().replace('
','') rate = item['cr'] print(comment, rate) with open('date_rate_comment_sg.txt', 'a', encoding='utf-8') as f: f.write('2018-07-06' + ',' + str(rate) + ',' + comment + '
') last_history_time= time.clock() resp.content_type= 'text/plain' await resp.prepare(request) await resp.write_eof() return resp last_history_time= time.clock() resp.content_type= 'text/plain' await resp.prepare(request) await resp.write_eof() return resp async def init(loop): app = Application() app.router.add_get('/', intro) app.router.add_post('/url', report_url) app.router.add_post('/douban_comment', app_douban_comment) return app def start_swipe_thread(): try: t = threading.Thread( target=swipe_for_next_page, name='swipe') # set daemon so main thread can exit when receives ctrl-c t.setDaemon(True) t.start() except Exception: print("Error: unable to start thread") loop = asyncio.get_event_loop() app = loop.run_until_complete(init(loop)) run_app(app, host='127.0.0.1', port=9999)
이것 은 예시 코드 로 실제 사용 과정 을 미세 조정 해 야 한다.고양이 눈 데 이 터 를 가 져 오 는 것 은 고양이 눈 앱 의 데이터 인 터 페 이 스 를 찾기 가 가장 어렵다.
나 는 많은 힘 을 들 여서 야 찾 았 다.
http://m.maoyan.com/mmdb/comments/movie/1200486.json?_v_=yes&offset=15'
인 터 페 이 스 를 어떻게 사용 하 는 지 코드 를 직접 보고 표를 찾 는 데 이 터 를 얻 으 려 면 직접 찾 아 보 세 요.

import json
import random
import urllib
import requests
from urllibimport request
import time
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win32; x32; rv:54.0) Gecko/20100101 Firefox/54.0',
'Connection': 'keep-alive'}
cookies ='v=3; iuuid=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; webp=true; ci=1%2C%E5%8C%97%E4%BA%AC; __guid=26581345.3954606544145667000.1530879049181.8303; _lxsdk_cuid=1646f808301c8-0a4e19f5421593-5d4e211f-100200-1646f808302c8; _lxsdk=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; monitor_count=1; _lxsdk_s=16472ee89ec-de2-f91-ed0%7C%7C5; __mta=189118996.1530879050545.1530936763555.1530937843742.18'
cookie = {}
for line in cookies.split(';'):
name, value = cookies.strip().split('=', 1)
 cookie[name] = value
def html_prase(url):
r = requests.get(url).content
return r
for iin range(1, 100):
print('     %s ' % i)
try:
url= 'http://m.maoyan.com/mmdb/comments/movie/1200486.json?_v_=yes&offset=%s&' %(i*15) +'startTime=2018-07-01%2012%3A30%3A42'
print(url)
 html = requests.get(url=url, cookies=cookie, headers=header).content
 data = json.loads(html.decode('utf-8'))['cmts']
for item in data:
comment = item['content']
  date = item['time'].split(' ')[0]
  rate = item['score']
  city = item['cityName']
img= item['avatarurl']
print(date, rate, comment, city, )
with open('maoyan_08.txt', 'a', encoding='utf-8') as f:
f.write(date + ',' + str(rate) + ',' + comment +',' + comment + ','+ city +'
') if img: f = open('C:\\Users\My\Desktop\yaoshen\img\\' + img.split('/')[-1], 'wb') f.write((urllib.request.urlopen(img)).read()) except: break time.sleep(5 + float(random.randint(1, 100)) / 20)
동적 맵 전시 코드:

from pyechartsimport Style
from pyechartsimport Geo
city =[]
with open('maoyan.txt', mode='r', encoding='utf-8') as f:
rows = f.readlines()
for row in rows:
if len(row.split(',')) == 5:
city.append(row.split(',')[4].replace('
','')) def all_list(arr): result = {} for iin set(arr): result[i] = arr.count(i) return result data = [] for item in all_list(city): data.append((item,all_list(city)[item])) style = Style( title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59' ) geo = Geo( "《 》 "," : ID: ", **style.init_style) attr, value = geo.cast(data) geo.add("", attr, value, visual_range=[0, 100], visual_text_color="#fff", is_legend_show=False, symbol_size=20, is_visualmap=True, tooltip_formatter='{b}', label_emphasis_textsize=15, label_emphasis_pos='right') geo.render()
매일 데이터 양 코드 를 추출:

from pyechartsimport EffectScatter
from pyechartsimport Style
style= Style(
title_color="#191970",
title_pos="left",
width=900,
height=450,
background_color='#F8F8FF'
)
es = EffectScatter("《     》      ","    :  ID:  ", **style.init_style)
es.add("", [1], [270], symbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.add("", [2], [606], symbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.add("", [3], [542], symbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.add("", [4], [550], symbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.add("", [5], [656], ssymbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.add("", [6], [850], ssymbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.add("", [7], [993], symbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.add("", [8], [903], symbol_size=20, effect_scale=4,
effect_period=5, symbol="pin")
es.render()

5 성 추천 하류 도 코드:

from pyechartsimport Style
from pyechartsimport ThemeRiver

data = [
 ['2018/07/08', 802, '  '], ['2018/07/08', 28, '  '], ['2018/07/08', 9, '  '], ['2018/07/08',8, '  '],
 ['2018/07/08', 4, '  '],

 ['2018/07/07',802, '  '], ['2018/07/07',166, '  '], ['2018/07/07',17, '  '],['2018/07/07',0, '  '],['2018/07/07',8, '  '],
 ['2018/07/06', 667, '  '], ['2018/07/06', 156, '  '], ['2018/07/06', 13, '  '], ['2018/07/06', 10, '  '],['2018/07/06', 4, '  '],
 ['2018/07/05', 567, '  '], ['2018/07/05', 76, '  '], ['2018/07/05', 13, '  '], ['2018/07/05', 0, '  '],['2018/07/05', 0, '  '],
 ['2018/07/04', 467, '  '], ['2018/07/04', 67, '  '], ['2018/07/04', 16, '  '], ['2018/07/04', 0, '  '],['2018/07/04', 0, '  '],
 ['2018/07/03', 478, '  '], ['2018/07/03', 56, '  '], ['2018/07/03', 8, '  '], ['2018/07/03', 0, '  '],['2018/07/03', 0, '  '],
 ['2018/07/02', 531, '  '], ['2018/07/02', 67, '  '], ['2018/07/02', 8, '  '], ['2018/07/02', 0, '  '],['2018/07/02', 0, '  '],
 ['2018/07/01', 213, '  '], ['2018/07/01', 45, '  '], ['2018/07/01', 5, '  '], ['2018/07/01', 1, '  '],
 ['2018/07/01', 1, '  '],
]
style = Style(
title_color="#191970",
title_pos="left",
width=1200,
height=600,
background_color='#F8F8FF'
)
tr = ThemeRiver("《     》    ","    :  ID:  ", **style.init_style)
tr.add(['  ', '  ', '  ', '  ', '  ',], data, is_label_show=True)
tr.render()
단어 구름 그림:

import pickle
from osimport path
import jieba
import matplotlib.pyplotas plt
from wordcloudimport WordCloud, STOPWORDS, ImageColorGenerator
def make_worldcloud(file_path):
text_from_file_with_apath= open(file_path,'r',encoding='UTF-8').read()
wordlist_after_jieba= jieba.cut(text_from_file_with_apath, cut_all=False)
wl_space_split= " ".join(wordlist_after_jieba)
print(wl_space_split)
backgroud_Image= plt.imread('./1.jpg')
print('      !')
'''      '''
stopwords= STOPWORDS.copy()
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ")
stopwords.add("  ") #        #        
wc= WordCloud(
width=1024,
height=768,
background_color='white',#       
mask=backgroud_Image,#       
font_path='E:\simsun.ttf', #       ,       ,        ,       ,     
max_words=600, #          
stopwords=stopwords,#      
max_font_size=400,#        
random_state=50,#             ,         
)
wc.generate_from_text(wl_space_split)#      
img_colors= ImageColorGenerator(backgroud_Image)
wc.recolor(color_func=img_colors)#            
plt.imshow(wc)#      
plt.axis('off')#     x 、y   
plt.show()#  
 #           
d = path.dirname(__file__)
# os.path.join():           
wc.to_file(path.join(d, "h11.jpg"))
print('      !')
make_worldcloud('cloud.txt')
그림 코드:

import os
from math import sqrt
from PIL import Image
#path               
path = 'C:\\Users\My\Desktop\yaoshen\img\\'
pathList= []
for item in os.listdir(path):
imgPath= os.path.join(path,item)
pathList.append(imgPath)
total = len(pathList)#total         
line = int(sqrt(total))#line        (           )
NewImage= Image.new('RGB', (128*line,128*line))
x = y = 0
for item in pathList:
try:
img= Image.open(item)
img= img.resize((128,128),Image.ANTIALIAS)
NewImage.paste(img, (x * 128 , y * 128))
 x += 1
except IOError:
print(" %d ,%d       !IOError:%s" % (y,x,item))
 x -= 1
if x == line:
x = 0
y += 1
if (x+line*y) == line*line:
break
NewImage.save(path+"final.jpg")
자,여기까지 소개 해 드 리 겠 습 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.!

좋은 웹페이지 즐겨찾기