네트워크를 통해 비트맵 이미지 전송
Pexels의 Sora Shimazaki님의 사진
이미지는 픽셀(색상의 작은 점)으로 구성됩니다. 이미지는 비트맵으로 디지털 방식으로 저장할 수 있습니다.
비트맵(Bit-Map)은 도메인을 비트로 매핑한 것입니다. 우리의 경우 도메인은 픽셀 배열이며 여기서는 단일 비트를 픽셀에 매핑합니다.
Pix-map은 여러 비트를 픽셀에 매핑하는 픽셀 맵입니다.
비트맵은 24비트 또는 32비트 색상 심도를 사용하고 RGB(255, 255, 255) 색상 시스템을 사용합니다. RGB 색상 시스템의 각 값은 바이트(8비트)로 저장되며, 추가 8비트는 이미지의 투명도를 표시하는 데 사용될 수 있습니다. 영상
R =8bits
G=8bits
B=8bits #24bit
A=8bits #32bit #extra transparency bit
이미지를 비트맵 형식으로 저장하면 이미지가 매우 커지므로 이미지는 대부분 압축 파일 형식으로 저장됩니다.
.PNG::무손실 압축. 패턴 주석 픽셀 색상을 사용하여 데이터를 압축하여 저장되는 데이터의 양을 줄입니다. readmore .
.jpg::손실 압축. 인간의 눈으로 식별할 수 없는 색상을 제거하여 데이터를 압축합니다. read more .
이제 우리는 네트워크를 통해 이미지를 보내는 프로그램을 작성할 것입니다. 따라서 UDP를 사용하여 네트워크를 통해 이미지를 보내고 직렬화를 위해 pickle도 사용할 것입니다.
sockfd = socket(AF_INET, SOCK_DGRAM)
image = Image.open("image.png")
width, height = image.size
rgba = image.getpixel(pos)
msg = dumps(message)
sockfd.sendto(msg, ("127.0.0.1", 9999))
우리가 보내는 이미지
from socket import *
from pickle import *
from PIL import Image
import time
#create a socket
sockfd = socket(AF_INET, SOCK_DGRAM)
#open image
image = Image.open("100kb.png")
#get image size
width, height = image.size
print(image.size)
for x in range(width):
for y in range(height):
#get the position in the two dimensional array
try:
pos = (x, y)
rgba = image.getpixel(pos)
message = (pos, rgba)
msg = dumps(message)
sockfd.sendto(msg, ("127.0.0.1", 9999))
time.sleep(0.001)
except:
print(1)#just a check
image4 = Image.new("RGBA", size=(width, height))
.여기에서는 너비와 높이를 이미 알고 있었지만 픽셀 데이터를 보내기 전에 네트워크를 통해 보낼 수도 있습니다.
from socket import *
from pickle import *
from PIL import Image
#viewer = ImageViewer()
sockfd = socket(AF_INET, SOCK_DGRAM)
sockfd.bind(("127.0.0.1", 9999))
height = 170
width = 272
isize = (height, width)
#image = open("image2.png", "x")
image4 = Image.new("RGBA", size=(width, height))
pixels = image4.load()
def get_pixel_data():
while True:
msg, cli_addr = sockfd.recvfrom(1024)
#decoding
message = loads(msg)
pos = message[0]
rgba = message[1]
print(pos)
pixels[pos[0], pos[1]] = rgba
#print(pixels[pos[0], pos[1]])
if pos[0] + 1 == width and pos[1] + 1 == height:
image4.save("image4.png")
break
#calling my function
get_pixel_data()
우리가 받은 이미지
이것은 즐거웠습니다. 제 글에서 배웠기를 바랍니다. 의견을 남기거나 저에게 연락하십시오.
Reference
이 문제에 관하여(네트워크를 통해 비트맵 이미지 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/black_strok3/transfering-bitmap-images-over-a-network-5f4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)