Я хочу получить URL-адрес пользователя для сканирования и загрузки изображений.Загруженные изображения должны быть сжаты.Как я могу создать пользовательский интерфейс с помощью колбы?Является ли это возможным?Я пробовал это много раз, но приложение не завершает работу после сканирования веб-сайта, из-за чего я не могу сжать изображения.Я понятия не имею о колбе.
import urllib.request
from bs4 import BeautifulSoup
from PIL import Image
from io import BytesIO
def make_soup(url):
thepage = urllib.request.urlopen(url)
soupdata = BeautifulSoup(thepage, "html.parser")
return soupdata
i = 1
soup = make_soup("https://www.standford.com/")
unique_srcs = []
for img in soup.findAll('img'):
if img.get('src') not in unique_srcs:
unique_srcs.append(img.get('src'))
for img_src in unique_srcs:
filename = str(i)
i = i + 1
imagefile = open(filename + '.png', 'wb')
imagefile.write(urllib.request.urlopen("https://www.standford.com/" + img_src).read())
imagefile.close()
# response = urllib.request.urlopen("https://www.standford.com/" + img_src).read()
#im = Image.open(BytesIO(response))
#im.convert("RGB").save(filename + '.png')
Для сжатия:
import os
import numpy as np
from skimage import io
from sklearn.cluster import MiniBatchKMeans
from matplotlib import pyplot as plt
import matplotlib.pyplot as mpimg
import cv2
algorithm = "full"
for f in os.listdir('.'):
if f.endswith('.png')
:
image = io.imread(f,0)
rows = image.shape[0]
cols = image.shape[1]
pixels = image.reshape(image.shape[0] * image.shape[1], image.shape[2])
kmeans = MiniBatchKMeans(n_clusters=128, n_init=10, max_iter=200)
kmeans.fit(pixels)
clusters = np.asarray(kmeans.cluster_centers_, dtype=np.uint8)
labels = np.asarray(kmeans.labels_, dtype=np.uint8)
labels = labels.reshape(rows, cols)
colored = clusters[labels]
# np.save('codebook'+f+'.npy', clusters)
io.imsave('compressed_' + f, colored)
img1 = mpimg.imread(f,0)
img2 = mpimg.imread('compressed_' + f,0)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 10))
ax1.imshow(img1)
ax1.set_title('Original image')
ax2.imshow(img2)
ax2.set_title('Compressed image')
plt.show()
fig, ax = plt.subplots(2, 1)
img = cv2.imread(f, 0)
ax[0].hist(img.ravel(), 256, [0, 256]);
ax[0].set_title("Original image")
img1 = cv2.imread('compressed_' + f,0)
ax[1].hist(img1.ravel(), 256, [0, 256]);
ax[1].set_title("Compressed image")
plt.show()
print('size of original image: ', int(os.stat(f).st_size / 1024), 'kB')
print('size of compressed image:', int(os.stat('compressed_' + f).st_size / 1024), 'kB')