Ruby 如何将字节数组转换为png图像
我想将一个字节字符串从Ice服务器转换为png,频率高达每秒30次。我使用Ruby 如何将字节数组转换为png图像,ruby,png,Ruby,Png,我想将一个字节字符串从Ice服务器转换为png,频率高达每秒30次。我使用chunky\u pnggem来表示以下代码: data = @@cprx.getImageData() width= data.description.width height = data.description.height png = ChunkyPNG::Image.new(width,height, ChunkyPNG::Color::TRANSPARENT) pixeles = data.pixelDa
chunky\u png
gem来表示以下代码:
data = @@cprx.getImageData()
width= data.description.width
height = data.description.height
png = ChunkyPNG::Image.new(width,height, ChunkyPNG::Color::TRANSPARENT)
pixeles = data.pixelData.bytes.to_a
k=0
for i in 0..height-1
for j in 0..width-1
png[j,i]=ChunkyPNG::Color.rgb(pixeles[k],pixeles[k+1],pixeles[k+2])
k=k+3
end
end
image = png.to_data_url
我创建一个图像,然后逐像素给出值。但是它太慢了。我想知道是否有一种更快的方法。最后,我用来自_rgb_stream的方法解决了这个问题。此外,还有一个相当于CykykyPNG的库,叫做CuyYyPNG,这是因为C++核心更快。我的代码当前看起来像:
def ice_camera
status = 0
ic = nil
if session[:conected2] == nil
arguments= ["--Ice.Config=cameraview.cfg"]
ic = Ice::initialize(arguments)
base = ic.propertyToProxy("Cameraview.Camera.Proxy")
cprx = Jderobot::CameraPrx::checkedCast(base)
session[:conected2] = true
thr1 = Thread.new do
@@mutex = Mutex.new
while true do
puts "11111111111111111111111111111111111111111"
data = cprx.getImageData()
png = ChunkyPNG::Canvas.from_rgb_stream(data.description.width, data.description.height, data.pixelData)
@@mutex.synchronize do
@@image=png.to_data_url
end
end
end
end
end
是每秒30张不同的图片吗?缓存是一种选择吗?您是否可以分叉4-8个进程,让所有CPU/内核保持忙碌,并以循环方式向它们发送图像?或者每个图像是否需要了解上一个/下一个图像的运动检测或类似信息?我尝试发送视频,每秒发送30个图像(可能更少,可能25个或更多)-是的,它们之间的图像是不同的,我现在不打算使用它们进行运动检测,尽管它是用于监视项目。如果您试图实现视频效果,那么
png
很可能是错误的解决方案。此外,在这种速度要求下(可能有多个客户端?),您可能应该使用ruby以外的其他语言来完成繁重的工作。请看一下opencv
ruby绑定:例如,接收视频流。OpenCV库包含一些例程,您可能会发现这些例程对您的项目非常有用。