前端圖片壓縮上傳(純js的質量壓縮,非長寬壓縮)

親測可用,已經使用,手機和電腦都可以直接上傳,拍照也可以。此demo為大于1M對圖片進行壓縮上傳若小于1M則原圖上傳,可以根據自己實際需求更改。demo源碼如下:


XMLHttpRequest上傳文件

推荐耐玩的手游

Python最有效的入門方法

Python是一個非常優雅的編程語言,語法非常的簡單,很多時候讀一些Python代碼就像讀英語一樣,很適合作為新手學習編程的第一門語言。Python里面有很多功能非常強大的機器學習和大數據分析的包,所以也適合很多對大數據和人工智能感興趣的同學來學習。

要想了解一門語言,不論是人類語言還是計算機語言,首先你需要了解這門語言的語法,Python語言也不例外,在這里我就講一講Python一些語法基礎,包括Python數據類型、變量類型、條件控制、循環結構等等。有了這些基礎,我們接下來就能夠學習Python當中稍微復雜一點的函數以及模塊了。

廢話少說,Here we go!

快速開始

Python的安裝我就不用介紹了,對應自己電腦的類型到官網下載安裝就好了,非常簡單。安裝好了之后你可以在命令行中鍵入命令python進入交互模式,也可以使用一款你喜歡的文本編輯器來編寫python腳本,然后在命令行中執行。幾乎對于所有的編程語言來說,第一個程序都是打印”hello, world!”。試用一下代碼就可以打印出“hello, world!”。

greeting = input()#從鍵盤中輸入“hello, world!”,記住input()函數輸出的都是字符串

print(greeting)

記住在python3中print后面一定要打括號。你也可以將你的腳本保存為“hello.py”,然后在命令行中執行

python3 hello.py

這樣就可以輸出:

hello, world!

數據類型

Python的語法相對比其它編程語言簡單的地方之一就是它不用申明變量類型。直接用“=”給一個變量賦值后這個變量就被創建了。Python中常見的數據類型有以下幾種:

數字 (Number)

python可以支持整數int(只有長整型), 浮點型float, 布爾型bool以及復數型complex。內置的type()函數可以用來判斷變量的類型,記住type()函數的返回值需要用print()打印出來。

(a, b, c, d) = (10, 5.5, False, 2+5j)

print(type(a))

字符串 (String)

Python中的字符串表示用單引號’ ‘或者雙引號” “括起來的任意字符,比如‘hello, world’, 或者“hello, world”,但如果引號里面又有引號的話,就需要用反斜線來轉義。

str = “python”

str.replace(‘p’, ‘P’)

切片:Python中字符串可以很方便的截取其中一部分,字符串的第一個字符索引值為0,第二個為1,后面一次累加,最后一個字符串索引為-1。截取的語法為:變量[第一個索引值:第二個索引值]

str1 = str[0]

str2 = str[2:4]

2. 連接和復制:兩個字符串可以用(+)連接成一個字符串,用星號*可以復制字符串

str3 = str1 + str2

str4 = str1 * 3

3. 多行輸出:可以用”’…”’的格式來輸出多行字符串

print(”’line1

line2

line3”’)

4. 判斷是否存在:in或者not in

if “n” not in str:

5. 格式化輸出:和C語言中的printf用法相同

print(“My name is %s and I’m %d years old” % (“Mike”, 16))

print(“Pi is %f” % (3.1415926)) # %f默認保留小數點后6位有效數字

print(“Pi is %.2f” % (3.1415926))

數據結構

列表 (List)

列表應該可以說是Python中最重要最常用的一種數據類型了,python中的列表很像Perl中的數組(array)結構。列表用方括號[]括起來,用逗號隔開,列表中的每一個元素都從0開始索引,-1為最后一個元素的索引,同樣也可以進行連接(+)和復制(*)操作。

list = [10, “python”, 8.2]

list1 = list[0:2]

list2 = list[1:]

list3 = list*2

“python” in list

List的常用內置函數:

len():獲得list的長度

max()、min():列表元素最大值和最小值(只支持相同類型元素)

append():往list的末尾添加元素

extend():往列表末尾添加多個值

insert(i, NewItem):插入任意元素

pop():刪除末尾的元素

pop(i):刪除索引是i的元素

count(obj):統計某個元素在列表中出現的次數

reverse():反向列表

sort():列表排序

clear():清空列表

list(tuple):將元組轉化為列表

元組(Tuple)

元組和列表非常像,唯一不同的是元組中的元素不能修改,用小括號()括起來,用逗號分開,當元組中只有一個元素時,也要加上逗號。

tuple1 = (8, “tuple”, 6.6″)

tuple2 = (“hello”,)

tuple3 = tuple1[2]

tuple4 = (8, “tuple”,[3, 10], 6.6″)

tuple4[2][1] = 6 #tuple4中的一個列表中的元素是可以更改的

字典(Dictionary)

Python中的字典就是Perl中的哈希(Hash),或者很多其它語言中的映射Map,字典和列表的區別是字典中的元素是無序的,用大括號{}來標識,并且是通過健(key)和值(Vavule)來存儲的,健必須是唯一的。

字典的常用內置函數:

dic.keys()

dic.values()

dic.pop(“site”) #刪除一個key

del dic[“site”] #刪除一個key

dic.clear()

key in dic

dic.items()

集合(Set)

集合用來存放一組無序且不可重復的元素,用大括號{}或者set()函數創建,如果要創建一個空集合就需要用set(),而不是{},因為{}是用來創建空字典的。set()函數只能接納一個list作為參數

num1 =

5 in num#判斷5是否在集合中

num2 = set([10, 8, 5, 8])#num2中只有10、8、5三個元素

num2.add(9) #添加元素

num2.remove(8)#刪除元素

num1 & num2#并集運算

num1 | num2#交集運算

條件判斷

條件判斷很簡答,這里就不贅述了

num = 10

if num > 0:

print “positive number!”

elif num

print “negative number!”

else:

print “0!”

循環控制

Python主要有兩種循環,for…in循環和while循環。for…in循環可以遍歷一個列表、元組或者字符串等等

range()函數

range(n)輸出0到n-1的整數列表

range(m,n)輸出m到n-1的整數列表

range(m,n,i)生成從m開始到n-1以i為增量的等差數列

range(len())結合可以遍歷一個大小未知的列表

for…in循環

names = [“John”, “Mike”, “Bob”]

for name in names:

print(name)

sum = 0

for i in range(101):

sum = sum + i

while循環

n = 10

sum = 0

while n > 0:

n = n-1

sum = sum + n

break和continue

break可以跳出整個循環體,而continue只是跳出當前循環,進入下一個循環

迭代器和生成器

列表生成式

列表生成式就是生成一個特定列表的表達式,基本語法:[exp for iter_var in iterable],例如:

list1 = [2*a for a in range(10)]

還可以加入一層循環:

list2 = [a*b for a in range(3) for b in range(4)]

還可以加入判斷語句:

list3 = [2*a for a in range(10) if a%2 == 1]

這樣寫比用循環語句來寫要簡單很多。注意不要忘記把式子用中括號括起來,因為你要生成的是列表。

生成器

用列表生成式生成的列表會把列表中所有的數據全部放入內存中,當列表非常大時,會消耗很多的內存,并且列表的大小是有限的,因此有些時候我們不必把一個完整的列表一下子生成放在內存中,我們可以只保存一個算法,當需要的時候可以一個一個的推出后續的元素,這種方法就叫做生成器(generator),構造生成器主要有兩種方式:

像列表生成式一樣,只要中括號[]改為小括號():

generator1 = (2*a for a in range(10))

2. 當程序比較復雜難以用列表生成式的方式產生生成器時,使用yield函數:

def cube(num1, num2):

for i in range(num1, num2):

yield i^3

當函數看到yield關鍵字時,這個函數就不再是一個普通函數了,而成了一個生成器generator,每一次調用next()函數時就執行一次,遇到yield就返回不再繼續執行,程序會記住當前的位置,直到下一次繼續調用next()再執行下一次,一直到不能再返回值了就報出StopIteration錯誤。

除了可以用next()函數調用生成器中的元素,更普遍的用法是用for循環來遍歷生成器中的元素:

g = cube(3, 8)

for n in g:

print(n)

迭代器

我們現在已經知道在Python中,可以用for循環迭代的對象包括:

string, list, tuple, dictionary, set

生成器generator

Python中可以用for循環迭代的對象統稱為”**可迭代對象Iterable**”。我們可以使用isinstance()函數來判斷對象的類型:

from collections import Iterable

print(isinstance(g, Iterable))

與之相應的,Python中定義可以next()函數調用,并不斷返回下一個值的對象稱之為**迭代器Iterator**,我們知道generator既可以被使用for循環,也可以使用next()函數,所以generator既是Iterable也是Iterator。但是string, list, tuple, dictionary, set等等不能使用next()函數,因此只是Iterable,但是可以使用iter()函數將Iterable變成Iterator。

isinstance([], Iterable)

isinstance(iter([]), Iterable)

以上差不多就是Python3最核心最基本的語法了,后面我會接著更新Python高級一點的知識,函數與模塊,祝大家學習愉快!