Растровое изображение рамером 512 на 250 пикселей, созданное с помощью палитры на 256 цветов.
передали по каналу связи со скоростью 5 Мбит/с. За сколько секунд передалось данное изображение?
Ответы
Ответ:
Вот даже код который передает по сокету изображение и расчитывает ответ на указанный вопрос. Жаль что сокет и канал связи все таки имеют отличия иначе я бы очень точно это рассчитал. А так ответ:
import asyncio
from PIL import Image
import socket
import os
import time
async def handle_client(reader, writer):
# Размер изображения
image_width = 512 # ширина в пикселях
image_height = 250 # высота в пикселях
bits_per_pixel = 8 # количество бит на пиксель (палитра из 256 цветов)
# Размер файла изображения в битах
image_size_bits = image_width * image_height * bits_per_pixel
# Конвертируем скорость передачи из Мбит/с в байты/сек
transfer_speed_mbps = 5
transfer_speed_bps = transfer_speed_mbps * 1e6 # 1 Мбит/с = 1e6 бит/с
# Рассчитываем время передачи в секундах
transfer_time_seconds = image_size_bits / transfer_speed_bps
print(f"Размер изображения: {image_width}x{image_height} пикселей")
print(f"Скорость передачи: {transfer_speed_mbps} Мбит/с")
print(f"Время передачи изображения: {transfer_time_seconds:.2f} секунд")
# Открываем и отправляем файл изображения по соксу
async def main():
# Определяем IP-адрес и порт сервера
server_ip = "127.0.0.1"
server_port = 25565
# Создаем изображение с помощью Pillow
image = Image.new("P", (512, 250))
palette = []
for i in range(256):
palette.extend((i, i, i))
image.putpalette(palette)
# Сохраняем изображение
image.save("image.png")
# Создаем сервер
server = await asyncio.start_server(
handle_client, server_ip, server_port)
print(f"Сервер запущен на {server_ip}:{server_port}")
reader, writer = await asyncio.open_connection(server_ip, server_port)
# Отправьте запрос на получение изображения
writer.write(b"GetImage") # Простой запрос, можете использовать свой протокол
# Создайте файл для сохранения полученного изображения
with open("image.png", "wb") as file:
while True:
data = await reader.read(1024)
if not data:
break
file.write(data)
# Закройте соединение с сервером
writer.close()
await writer.wait_closed()
async with server:
await server.serve_forever()
if __name__ == "__main__":
asyncio.run(main()
Точный ответ - 0.204