精华内容
下载资源
问答
  • 基于VS2005的c++代码,主要通过服务器端和客户端的IP进行图片数据的传输,UDP协议,并最终将图片显示出来。
  • 网络传输文件软件更多精彩,欢迎来我的论坛逛逛! 快乐论坛630 http://hanranran.5d6d.com/bbs.php 快乐网赚论坛 http://wangzhuan630.5d6d.com/bbs.php 中国网赚论坛 ...大量精彩图片软件免费下载 ...
  • 视频图片传输

    2010-01-30 21:51:00
    碰巧一直想弄个视屏传输的教学软件。让学生可以看到我的电脑上的时时操作。如果每幅图片都好几M。机房30台机器,服务器把一幅图片分发到下下面每一台机器,就要送几十兆的数据出去。确实太大了,肯定满足不了要求。...

    有个朋友做桌面图片截屏的网络传输,碰到图片尺寸过大的问题。也是,现在的显示器越来越大,分辨率越来越高,一个桌面图片都有几M。想时时传输,数据量确实大了点。碰巧一直想弄个视屏传输的教学软件。让学生可以看到我的电脑上的时时操作。如果每幅图片都好几M。机房30台机器,服务器把一幅图片分发到下下面每一台机器,就要送几十兆的数据出去。确实太大了,肯定满足不了要求。

        为了提高传输效率,有几个改进办法:

         1首先。将桌面的颜色从32位图改成16位图,为了简单起见,我也不想自己程序来完成32位图到16位图的转化,直接将显示器显示设置改成16位图吧。这样先减少一半的数据量先。当然如果不想修改系统显示设置,就自己程序转化吧。有代码可以参考的。

        2.采取差分法+压缩算法,,如果我们每次都将当前图片与上次的图片进行差分计算,或者再简单点,就2幅图像异或,,这样前后两幅图片相同的部分就能被xor成了0,应该说绝大多数情况下,前后2幅图片变化的差异并不多。变化部分xor后当然不为0咯。然后我们再将这个差分后的图片进行压缩。我们学过数据结构知道,这些压缩算法很多都是基于 Huffman 编码的,这样那些大部分为0的连续数据,就被”无情“的被压缩了。

        3.就是老掉牙的技术了,将send/recv改为sendto/recvfrom。。。一点有趣的新意都没,说都懒得说。

    展开全文
  • 摘 要:针对具有蓝牙配置的手机,运用蓝牙协议栈和J2ME 蓝牙通信API 来实现手机文件数据的...本文利用蓝牙技术开发一个用于手机文件数据传输软件,具有即建即连、使用灵活、安全高效等特点,避免传统网络文件传输
  • 苹果无线传输软件,超好用,可以直接从电脑无线传输视频,图片等,无大小限制。
  • 摘 要:针对具有蓝牙配置的手机,运用蓝牙协议栈和J2ME 蓝牙通信API 来实现手机文件数据的...本文利用蓝牙技术开发一个用于手机文件数据传输软件,具有即建即连、使用灵活、安全高效等特点,避免传统网络文件传输
  • 摩卡易传主要功能:支持发送图片、视频 -- 让您轻松把iPhone、iPad的图片、视频发送到另一台设备上。 支持发送文字信息 -- 让您轻松从电脑发送电话号码、地址或者其它文字发送到iPhone、iPad上。 支持浏
  • 曾经在linux上实现过一个文件传输软件,客户端可以向服务器一次传输多个文件或者图片,并且在客户端可以看到文件传输的进度。 功能非常简单,但是涉及到的知识挺多的:GDB的调试;socket编程;多线程编程。最重要...

            曾经在linux上实现过一个文件传输软件,客户端可以向服务器一次传输多个文件或者图片,并且在客户端可以看到文件传输的进度。

            功能非常简单,但是涉及到的知识挺多的:GDB的调试;socket编程;多线程编程。最重要的是你编程的过程中可以将TCP/IP协议进行深入的理解。我本着在编程过程中进行学习而不是仅仅是为了实现功能的态度,再次去做这个非常简单的文件传输软件。所以我会由简向难,像搭积木一样实现这个文件传输软件。

            最后介绍我编程的平台:

            LINUX(fedora)

            VIM

            GCC

            

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载于:https://www.cnblogs.com/TGSB/p/4824242.html

    展开全文
  • 图片压缩软件

    2011-11-02 15:07:56
    该工具软件用于压缩大的图片文件,方便传输存储。
  • Android屏幕共享-传输图片 该篇主要讲解安卓与安卓之间如何截图传输,属于安卓屏幕共享的入门篇。适用场景:安卓屏幕共享工具类应用。 效果图 效果图 demo界面 前言 目前安卓屏幕共享的方式有很多种软件已经实现...

    Android屏幕共享-传输图片

    该篇主要讲解安卓与安卓之间如何截图传输,属于安卓屏幕共享的入门篇。适用场景:安卓屏幕共享工具类应用。

    效果图

    效果图

    效果图
    demo界面

    Demo

    前言

    目前安卓屏幕共享的方式有很多种软件已经实现,究其根源,无非就是采集-传输-播放的过程,而安卓端无论是截图传输还是硬解码,也一定离不开核心类MediaProjection,它就是Google开放了视频录制的接口(屏幕采集的接口)。

    比较优秀的软件举例:

    • TeamViewer
    • 向日葵
    • Vysor

    其中Vysor就是通过adb实现无root静默截图,然后传输,实现电脑控制手机。在整个屏幕共享的过程中,重点在于如何采集,采集到画质清晰内存又小的技术成为核心。

    常用的安卓端采集技术有:

    • MediaProjection 实现截图
    • MediaProjection 硬解码
    • ffmpeg 软解码
    • adb 实现无root截图

    功能点

    1. android5.0及以上免root截图
    2. 安卓屏幕变化的时候采集
    3. 多端共享拓展简单
    4. socket传输字节数组
    5. 尽可能都使用原生代码实现

    功能讲解

    截图

    随着安卓系统的不断升级,权限也越来越收紧,无root并且不连接数据线做不到静默截图,这里指截取不属于该app的区域。

    • 在允许连接数据线的情况下,可以通过adb shell push 事先编译好的 dex 文件到手机中,实现静默截图。
    • 在没有链接数据线无root的情况下,只能显式的让用户有感知的进行截取。本篇截图使用的是 MediaProjection, 如下图:

    在这里插入图片描述

    MediaProjection 是Android 5.0 开放的屏幕截图与录制视频的接口,是一个系统级的服务,在使用前需要动态申请权限,并在onActivityResult进行处理。
    eg:

         /**
         * 申请截屏权限
         */
        private void tryStartScreenShot() {
            MediaProjectionManager mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
            if (mProjectionManager != null) {
                startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION);
            }
        }
        
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_MEDIA_PROJECTION && data != null) {
                if (resultCode == RESULT_OK) {
                    // 截屏的回调
                    ScreenShotHelper screenShotHelper = new ScreenShotHelper(this, resultCode, data, this);
                    screenShotHelper.startScreenShot();
                } else if (resultCode == RESULT_CANCELED) {
                    LogWrapper.d(TAG, "用户取消");
                }
            }
        }
    
    

    在屏幕共享时,一直截图就会很费性能,如果在屏幕改变时进行截图就好了。
    刚好,在ImageReader中有setOnImageAvailableListener可以让我们方便的拿到屏幕变化的数据。eg:

         /**
         * 屏幕发生变化时截取
         */
        private class ImageAvailableListener implements ImageReader.OnImageAvailableListener {
            @Override
            public void onImageAvailable(ImageReader reader) {
                try (Image image = reader.acquireLatestImage()) {
                    if (image != null) {
                      // todo 
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    

    图片处理

    图片格式:

    • png:无损压缩图片格式,支持Alpha通道
    • jpeg:有损压缩图片格式,不支持背景透明
    • webp:“WebP 是 Android 4.2.1(API 级别 17)支持的较新图片格式。这种格式可为网络上的图片提供出色的无损压缩和有损压缩效果。使用 WebP,开发者可以创建更小、更丰富的图片。WebP 无损图片文件比 PNG 平均缩小了 26%。这些图片文件还支持透明度(也称为 Alpha 通道),只需增加 22% 的字节。
      WebP 有损图片比采用等效 SSIM 质量指标的同等 JPG 图片缩小 25-34%。对于可以接受有损 RGB 压缩的情况,有损 WebP 也支持透明度,生成的文件大小通常比 PNG 小 3 倍。” – 出自谷歌官方文档

    笔者曾尝试过webp格式的编码,大小确实降低了50%左右,但是编码耗时却长了100%,相当于用CPU换网速。这样看来webp并不适用该场景。

    图片压缩:

    • 压缩大小
    • 压缩图片质量

    该Demo的代码中是将bitmap压缩到固定的大小

    Server:

    /**
         * 压缩图片 (压缩后不代表实际大小,有差异)
         *
         * @param bitmap    被压缩的图片
         * @param sizeLimit 大小限制  单位 k
         * @return 压缩后的图片
         */
        public static Bitmap compressBitmap(Bitmap bitmap, long sizeLimit) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int quality = 90;
            bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
            // 循环判断压缩后图片是否超过限制大小
            while (baos.toByteArray().length / 1024 > sizeLimit) {
                baos.reset();
                bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
                quality -= 10;
            }
            return BitmapFactory.decodeStream(new ByteArrayInputStream(baos.toByteArray()), null, null);
        }
    
    

    socket传输

    原生socket在发送大量数据时,会进行分包,接收的时候也就必须要合包;
    有一些第三方socket框架会帮助我们处理合包的操作,websocket则是在它的协议标准中处理了这个问题。
    所以该demo中选用了websocket进行通讯。拿到的截图的数据放进去就可以了。

    
    import com.talon.screen.quick.util.LogWrapper;
    import org.java_websocket.WebSocket;
    import org.java_websocket.handshake.ClientHandshake;
    import org.java_websocket.server.WebSocketServer;
    
    import java.net.InetSocketAddress;
    
    /**
     * @author by Talon, Date on 2020-04-13.
     * note: websocket 服务端
     */
    public class MWebSocketServer extends WebSocketServer {
    
        private final String TAG = "MWebSocketServer";
    
        private WebSocket mWebSocket;
        private boolean mIsStarted = false;
        private CallBack mCallBack;
    
        public MWebSocketServer(int port, CallBack callBack) {
            super(new InetSocketAddress(port));
            this.mCallBack = callBack;
            setReuseAddr(true);
            setConnectionLostTimeout(5 * 1000);
        }
    
        @Override
        public void onOpen(WebSocket webSocket, ClientHandshake handshake) {
            LogWrapper.d(TAG, "有用户链接");
            mWebSocket = webSocket;
        }
    
        @Override
        public void onClose(WebSocket conn, int code, String reason, boolean remote) {
            LogWrapper.d(TAG, "有用户离开");
        }
    
        @Override
        public void onMessage(WebSocket conn, String message) {
            LogWrapper.e(TAG, "接收到消息:" + message);
        }
    
        @Override
        public void onError(WebSocket conn, Exception ex) {
            LogWrapper.e(TAG, "发生error:" + ex.toString());
        }
    
        @Override
        public void onStart() {
            updateServerStatus(true);
        }
    
        /**
         * 停止服务器
         */
        public void socketStop() {
            try {
                super.stop(100);
                updateServerStatus(false);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 发送二进制
         *
         * @param bytes
         */
        public void sendBytes(byte[] bytes) {
            if (mWebSocket != null)
                mWebSocket.send(bytes);
        }
    
        private void updateServerStatus(boolean isStarted) {
            mIsStarted = isStarted;
            LogWrapper.e(TAG, "mIsStarted:" + mIsStarted);
            // 回调
            if (mCallBack != null)
                mCallBack.onServerStatus(isStarted);
        }
    
        public boolean isStarted() {
            LogWrapper.e(TAG, "mIsStarted:" + mIsStarted);
            return mIsStarted;
        }
    
        public interface CallBack {
            void onServerStatus(boolean isStarted);
        }
    
    }
    
    

    Client:

    import com.talon.screen.quick.util.BitmapUtils;
    import com.talon.screen.quick.util.LogWrapper;
    
    import org.java_websocket.client.WebSocketClient;
    import org.java_websocket.handshake.ServerHandshake;
    
    import java.net.SocketException;
    import java.net.URI;
    import java.nio.ByteBuffer;
    
    /**
     * @author by Talon, Date on 2020-04-13.
     * note: websocket 客户端
     */
    public class MWebSocketClient extends WebSocketClient {
    
        private final String TAG = "MWebSocketClient";
    
        private boolean mIsConnected = false;
        private CallBack mCallBack;
    
        public MWebSocketClient(URI serverUri, CallBack callBack) {
            super(serverUri);
            this.mCallBack = callBack;
        }
    
        @Override
        public void onOpen(ServerHandshake handshakeData) {
            LogWrapper.e(TAG, "onOpen");
            updateClientStatus(true);
    
            try {
                getSocket().setReceiveBufferSize(5 * 1024 * 1024);
            } catch (SocketException e) {
                e.printStackTrace();
            }
    
    
        }
    
        @Override
        public void onMessage(String message) {
    
        }
    
        @Override
        public void onMessage(ByteBuffer bytes) {
            byte[] buf = new byte[bytes.remaining()];
            bytes.get(buf);
            if (mCallBack != null)
                mCallBack.onBitmapReceived(BitmapUtils.decodeImg(buf));
        }
    
        @Override
        public void onClose(int code, String reason, boolean remote) {
            updateClientStatus(false);
        }
    
        @Override
        public void onError(Exception ex) {
            updateClientStatus(false);
        }
    
        private void updateClientStatus(boolean isConnected) {
    
            mIsConnected = isConnected;
            LogWrapper.d(TAG, "mIsConnected:" + mIsConnected);
            // 回调
            if (mCallBack != null)
                mCallBack.onClientStatus(isConnected);
        }
    
        public boolean isConnected() {
            LogWrapper.d(TAG, "mIsConnected:" + mIsConnected);
            return mIsConnected;
        }
    
        public interface CallBack {
            void onClientStatus(boolean isConnected);
    
            void onBitmapReceived(Bitmap bitmap);
        }
    
    
    }
    

    Demo下载

    demo下载(github)
    demo下载(CSDN)

    展开全文
  • 可将联想手机中的图片、铃声、短信、电话簿等导入到电脑,也可以向手机中拷贝上述资源。
  • 考虑到STM32集成度高、功能强大、功耗低的优点以及嵌入式Linux操作系统源码开放、系统稳定、软件丰富、网络结构完整等特点,本文提出了一种以STM32为硬件平台辅以嵌入式Linux软件平台的无线图像采集与传输系统。...
  • 1. socket是应用层与TCP/IP协议之间的中间抽象软件层,位于七层模型中的第五层--会话层。 2. websocket是一个应用层协议,基于TCP协议进行数据传输,是对TCP协议的封装,与socket除了名字以外没什么关系。 ...

    2020-06-18 题目来源:http://www.h-camel.com/index.html

    [html] websocket握手阶段是通过什么协议传输的?

    websocket与socket:
    1. socket是应用层与TCP/IP协议之间的中间抽象软件层,位于七层模型中的第五层--会话层。
    2. websocket是一个应用层协议,基于TCP协议进行数据传输,是对TCP协议的封装,与socket除了名字以外没什么关系。
    
    websocket在握手阶段是通过http协议进行传输的,建立连接之后,通过TCP协议进行传输数据。
    

    [css] 使用css画一个饼图的效果

    可以看这里 https://blog.csdn.net/vampire10086/article/details/106823676
    

    [[js] ajax如何接收后台传来的图片

    ajax 接收后台数据库图片 https://blog.csdn.net/zhongaiyisheng_/article/details/104876469
    
    个人感觉主要是后台要对图片进行处理,比如转换成base64的,java后台可以参考 https://blog.csdn.net/weixin_41608476/article/details/79354592
    
    ajax 接收后台图片 https://blog.csdn.net/footprint01/article/details/82958293
    

    [软技能] 你办公软件用得熟练吗?都有哪些技巧呢?

    这个有点多了,自行百度吧
    展开全文
  • 图片批量处理软件

    2011-11-11 15:11:40
    可以批量压缩图片文件大小:图片文件太大不利于存储和传输,在不修改图片尺寸的情况下,我们可以调整图片的质量来达到压缩图片文件大小,以便于存储和传输. 可以批量锐化图片:拍出来的照片有点模糊,或者本来清晰的图片...
  • 之前为客户定制的牙片机应用软件,由于赛特力SOPIX机型无DICOM数字接口,应客户要求定制的应用软件,主要实现 SOPIX牙片机图片转DICOM格式,DICOM影像传输、牙片报告打印功能。 此为最终编译后的颜色版本,有...
  • 1. 系统概述本设计采用NIOS2 32位处理器,通过SPI接口将SD/TF卡中的JPEG图片数据读取到内存中,SD/TF卡的文件系统为FAT32,NIOS2软件实现将JPEG图片通过UART串口发送给上位机显示,系统框图如下:2. UART介绍UART...
  • 我们设计出了二维码的编码和解码,但要进行拍摄的时候,就必须对拍摄的图片进行定位和裁剪,以达到更好的识别效果。 一、二维码的定位 参考这篇博客的内容,我们对二维码定位点识别 python+opencv实现二维码定位(一...
  • 总不至于在集群中生成个图片,随便看下效果,也要用filezilla、winscp之类的远程文件传输工具导过来导过去吧,这样效率太低。 Linux图片查看常用eog和ImageMagick两款软件。可是关于eog的资料实在是太少了,就算下...
  • FTP可用多种格式传输文件,通常由系统决定,大多数系统(包括UNIX系统)只有两种模式:文本模式和二进制模式。...一般来说:如果你用错误的模式传输你的图片,你将会无法看到图片,看到的会是乱码。如果你用错误
  • WIN7系统下,采用基恩士的IV系列相机,FTP主站的建立通过SEVER-U软件,把工控机作为FTP主站,相机作为从站,详细说明见PDF文档。
  • 使用图压,可以在不影响视觉效果的条件下,将需要添加到网页、PPT、Word、PDF 中的图片文件大幅减少,降低传输时间。在上传图片遇到文件大小限制时尤其好用,图压内置了压缩至目标文件大小的功能。
  • 使用图压,可以在不影响视觉效果的条件下,将需要添加到网页、PPT、Word、PDF 中的图片文件大幅减少,降低传输时间。在上传图片遇到文件大小限制时尤其好用,图压内置了压缩至目标文件大小的功能。
  • 由于使用Socket通信,只能传输byte[]数据,所以这一步是向下位机传输的关键。 相应地,编程实现了下面几个功能: 1.使用GDI+画图并保存为bmp格式的图片。画图部分是书上的例子,只增加了保存的相应代码。 ...
  • 现在我们也会遇到一些比较大的图片文件,这些图片传输到各个网站会传输失败,这样的话我们就需要用到压缩软件将图片压缩,下面小编就为大家介绍一下图片压缩软件的使用方法。 1:将压缩软件安装到自己的电脑,打开...
  • 软件将文件传输的iPod iPad的iPhone和个人电脑之间Syncios 您是否正在寻找替代iTunes的复制各种文件到您的iOS设备?如果你想另辟蹊径,图片,应用程序,音乐,电子书和更多复制到您的设备没有iTunes,Syncios是真棒的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,047
精华内容 418
关键字:

图片传输软件