精华内容
下载资源
问答
  • 另外保存gif多帧图像是使用的CxImage类,该类保存的Gif彩色图像质量较差且占用内存较大(不关我的事),因此请不要录制太时间! 录制出来的Gif图像显示效果怎么样?由于该程序没做Gif多帧图像的显示功能(主打功能...
  • 另外保存gif多帧图像是使用的CxImage类,该类保存的Gif彩色图像质量较差且占用内存较大(不关我的事),因此请不要录制太时间,录制时间越保存所需时间越! 录制出来的Gif图像显示效果怎么样?由于该程序没...
  • 点击上图绿色框内的分享图标,弹出遮罩层,遮罩层红色框内的保存到相册的图片区域,点击下载海报的时候就将图片区域进行截图并且保存到本地。 下面来做具体实现: 具体安装步骤就不再赘述了, 引入截屏组件...

    最近要做下载海报和分享的功能,于是有了这篇博客~~
    首先来看一下要实现的效果~
    在这里插入图片描述

    首先捋一下实现步骤:

    遮罩层红色框内的为要保存到相册的图片区域,点击下载海报的时候就将图片区域进行截图并且保存到本地。

    下面来做具体实现:

    具体安装步骤就不再赘述了,网上有各种教程

    1. 引入截屏组件react-native-view-shot

    	import ViewShot from "react-native-view-shot";
    	
    	<ViewShot ref="viewShot" options={{ format: "jpg", quality: 1, width: 375, height: 570 }} style={styles.imageArea}>   // 截图区域
    	</ViewShot>
    
    	
    

    然后在需要截图的时候使用以下代码进行截取:

    this.refs.viewShot.capture().then(uri => {    // 这里的refs后面的viewShot为上面标签中自定义的,可以更改
          this.setState({
            shareImg: uri,    // 这个uri即为截下来的图片,可以在上面标签中format指定类型
          })
        });
    

    2. 保存内存中的图片到本地
    首先引入CameraRoll

    import CameraRoll from "@react-native-community/cameraroll";
    

    然后在需要保存时进行以下操作:

      // 下载海报
      _savaImg = () => {
        let promise = CameraRoll.saveToCameraRoll(this.state.shareImg);
        promise.then(function (result) {
          alert('保存成功!地址如下:\n' + result);
        }).catch(function (error) {
          alert('保存失败!\n' + error);
        });
      }
    
    1. End
    展开全文
  • 另外保存gif多帧图像是使用的CxImage类,该类保存的Gif彩色图像质量较差且占用内存较大(不关我的事),因此请不要录制太时间! 录制出来的Gif图像显示效果怎么样?由于该程序没做Gif多帧图像的显示功能(主打功能...
  •  随着网络的普及,人们对联系人的管理越来越趋向于将其备份到网络中,这样换设备时可以很方便进行同步,而且也方便不同设备之间的通讯录备份,而今天我想提到的是一种比较老的电话本存储方式,即存储到SIM卡中,这...
    第一次写博客,随便写写之前的一些问题吧。

        随着网络的普及,人们对联系人的管理越来越趋向于将其备份到网络中,这样换设备时可以很方便进行同步,而且也方便不同设备之间的通讯录备份,而今天我想提到的是一种比较老的电话本存储方式,即存储到SIM卡中,这快在我两年多的工作中饱受诟病,SIM卡联系人相关的问题很多,特别是在面向印度、菲律宾、马来等运营商超级多(一个国家几百个运营商)的情况下,SIM卡的规格也各式各样,导致保存联系人到SIM卡时,会出现重启手机,SIM卡联系人丢失、切换电话簿SIM卡联系人不变以及无法保存SIM卡联系人等情况,这里只简单介绍SIM卡保存姓名的长度问题。
        SIM卡的文件结构在网上也有很多,这里不再赘述,SIM卡存储空间有限,决定了其能保存的字节数是一定的,因此为了能在SIM卡中保存尽可能多的字数的联系人姓名,就必须通过编码对要保存的内容进行压缩处理,SIM卡保存联系人时使用的编码方式为UCS2编码,这种编码在http://blog.csdn.net/yao_guet/article/details/7074871这一博客中已有了较为详细的解释,基础算法解释已经很详细了,而这里我想阐述的是它在android中的应用,编码方式以及原理在上述链接中已经存在了,但谷歌在处理一些字符时添加了不少内容,导致单纯的编码方式放到手机中会出现较多的漏洞。
        首先我们看下解码的方法:
    public static String
    adnStringFieldToString(byte[] data, int offset, int length) {
    if (length == 0) {
    return "";
    }
    if (length >= 1) {
    if (data[offset] == (byte) 0x80) {
    int ucslen = (length - 1) / 2;
    String ret = null;
    
    
    try {
    ret = new String(data, offset + 1, ucslen * 2, "utf-16be");
    } catch (UnsupportedEncodingException ex) {
    Rlog.e(LOG_TAG, "implausible UnsupportedEncodingException",
    ex);
    }
    
    
    if (ret != null) {
    // trim off trailing FFFF characters
    
    
    ucslen = ret.length();
    while (ucslen > 0 && ret.charAt(ucslen - 1) == '\uFFFF')
    ucslen--;
    
    
    return ret.substring(0, ucslen);
    }
    }
    }
    
    
    boolean isucs2 = false;
    char base = '\0';
    int len = 0;
    
    
    if (length >= 3 && data[offset] == (byte) 0x81) {
    len = data[offset + 1] & 0xFF;
    if (len > length - 3)
    len = length - 3;
    
    
    base = (char) ((data[offset + 2] & 0xFF) << 7);
    offset += 3;
    isucs2 = true;
    } else if (length >= 4 && data[offset] == (byte) 0x82) {
    len = data[offset + 1] & 0xFF;
    if (len > length - 4)
    len = length - 4;
    
    
    base = (char) (((data[offset + 2] & 0xFF) << 8) |
    (data[offset + 3] & 0xFF));
    offset += 4;
    isucs2 = true;
    }
    
    
    if (isucs2) {
    StringBuilder ret = new StringBuilder();
    
    
    while (len > 0) {
    // UCS2 subset case
    
    
    if (data[offset] < 0) {
    ret.append((char) (base + (data[offset] & 0x7F)));
    offset++;
    len--;
    }
    
    
    // GSM character set case
    
    
    int count = 0;
    while (count < len && data[offset + count] >= 0)
    count++;
    
    
    ret.append(GsmAlphabet.gsm8BitUnpackedToString(data,
    offset, count));
    
    
    offset += count;
    len -= count;
    }
    
    
    return ret.toString();
    }
    
    
    Resources resource = Resources.getSystem();
    String defaultCharset = "";
    try {
    defaultCharset =
    resource.getString(com.android.internal.R.string.gsm_alphabet_default_charset);
    } catch (NotFoundException e) {
    // Ignore Exception and defaultCharset is set to a empty string.
    }
    return GsmAlphabet.gsm8BitUnpackedToString(data, offset, length, defaultCharset.trim());
    }

    上述代码在AOSP/frameworks/opt/telephony/src/java/com/android/internal/telephony/IccUtils.java中,用于从SIM卡中读取到byte字节数组后将其解码为正确的字串,可以看到在解码时会将80/81/82编码转换为gsm8bit编码后再使用GsmAlphabet.gsm8BitUnpackedToString编码进行解码,对应代码为:
        public static String
        gsm8BitUnpackedToString(byte[] data, int offset, int length, String characterset) {
            boolean isMbcs = false;
            Charset charset = null;
            ByteBuffer mbcsBuffer = null;
    
            if (!TextUtils.isEmpty(characterset)
                    && !characterset.equalsIgnoreCase("us-ascii")
                    && Charset.isSupported(characterset)) {
                isMbcs = true;
                charset = Charset.forName(characterset);
                mbcsBuffer = ByteBuffer.allocate(2);
            }
    
            // Always use GSM 7 bit default alphabet table for this method
            String languageTableToChar = sLanguageTables[0];
            String shiftTableToChar = sLanguageShiftTables[0];
    
            StringBuilder ret = new StringBuilder(length);
            boolean prevWasEscape = false;
            for (int i = offset ; i < offset + length ; i++) {
                // Never underestimate the pain that can be caused
                // by signed bytes
                int c = data[i] & 0xff;
    
                if (c == 0xff) {
                    break;
                } else if (c == GSM_EXTENDED_ESCAPE) {
                    if (prevWasEscape) {
                        // Two escape chars in a row
                        // We treat this as a space
                        // See Note 1 in table 6.2.1.1 of TS 23.038 v7.00
                        ret.append(' ');
                        prevWasEscape = false;
                    } else {
                        prevWasEscape = true;
                    }
                } else {
                    if (prevWasEscape) {
                        char shiftChar =
                                c < shiftTableToChar.length() ? shiftTableToChar.charAt(c) : ' ';
                        if (shiftChar == ' ') {
                            // display character from main table if not present in shift table
                            if (c < languageTableToChar.length()) {
                                ret.append(languageTableToChar.charAt(c));
                            } else {
                                ret.append(' ');
                            }
                        } else {
                            ret.append(shiftChar);
                        }
                    } else {
                        if (!isMbcs || c < 0x80 || i + 1 >= offset + length) {
                            if (c < languageTableToChar.length()) {
                                ret.append(languageTableToChar.charAt(c));
                            } else {
                                ret.append(' ');
                            }
                        } else {
                            // isMbcs must be true. So both mbcsBuffer and charset are initialized.
                            mbcsBuffer.clear();
                            mbcsBuffer.put(data, i++, 2);
                            mbcsBuffer.flip();
                            ret.append(charset.decode(mbcsBuffer).toString());
                        }
                    }
                    prevWasEscape = false;
                }
            }
    
            return ret.toString();
        }

    对应代码在AOSP/frameworks/base/telephony/java/com/android/internal/telephony/GsmAlphabet.java中,这里可以看到谷歌添加了一个GSM_EXTENDED_ESCAPE即0x1B,作为空白符的标志位,以及sLanguageTables、sLanguageShiftTables这两个表,这两个表在编码时里面的字符是不能编码的,需要直接将它们的码值写入,即逻辑上来讲gsm8bit因为有效位只有7位,可以使用1个字节来标示其信息,但因为这两个特殊表的存在,因此在编码这两张表中的字符时,一定要耗费一个字节存放GSM_EXTENDED_ESCAPE,另外一个字节存放该字节的码值:
    SparseIntArray charToLanguageTable = sCharsToGsmTables[0];
            SparseIntArray charToShiftTable = sCharsToShiftTables[0];
    ---------------------------------------
    char c = (char)src[srcOff+i+1];
                        if(isGsmSeptets(c)){
                            int v = charToLanguageTable.get(c, -1);
                            if (v == -1) {
                                v = charToShiftTable.get(c, -1);
                                if (v == -1) {
                                    v = charToLanguageTable.get(' ', ' ');  // fall back to ASCII space
                                } else {
                                    // make sure we can fit an escaped char
                                    dest[outOff++] = GSM_EXTENDED_ESCAPE;
                                }
                            }
                            dest[outOff] = (byte)v;
                        }else{
                            dest[outOff] = (byte) (src[srcOff + i + 1] & 0x7F);
                        }

    这样才可以保证其在解码时不会出现乱码(这部分代码需要自己处理,简单算法就是这样),目前我所知道的一些gsm8的特殊编码为@、#、$、|、\、~等,而且因为SIM卡姓名可输入的内容复杂,所以会导致编码情况异常复杂,在阿拉伯、乌尔都等阿拉伯语系其编码的码值范围如同汉子一样不连续,菲律宾语使用拉丁语扩展及,这些码值混合到一起会对编码解码造成很大的影响,因此我的做法是对SIM卡输入框中添加TextWatch并对输入内容进行预编码解码的操作,并在达到最优长度时使光标不再移动(即无法再输入字符)这样才能满足所有的输入编码问题。

        本文只是简单介绍,具体代码使用java实现但最近在下觉得其实现效率较低,因此正在尝试将其封装为so库提高编解码效率。

    展开全文
  • 火狐浏览器将网页保存为pdf

    千次阅读 2020-02-10 23:36:41
    有时候查一些技术博客之类的,当时收藏了,过一阵子再想查看的时候发现404了,所以稳妥的办法还是将把网页保存为pdf。 火狐打印功能 在要打印的网页选择打印(快捷键Crtl+P) 打印 选择文件夹,保存即可 ...

    深夜更博仙女镇

    在这里插入图片描述



    有时候查一些技术博客之类的,当时收藏了,过一阵子再想查看的时候发现404了,所以稳妥的办法还是将把网页保存为pdf。


    火狐打印功能

    • 在要打印的网页选择打印(快捷键Crtl+P)

    在这里插入图片描述
    在这里插入图片描述

    • 打印

    • 选择文件夹,保存即可

    在这里插入图片描述


    火狐插件 save as pdf

    • 在火狐浏览器中打开附加组件(快捷键Crtl+Shift+A)

    在这里插入图片描述

    • 搜索插件 save as pdf

    在这里插入图片描述

    • 加载插件

    在这里插入图片描述
    添加完插件以后,浏览器右上角会有相应的图标。

    在这里插入图片描述

    • 将网页另存为pdf
      打开要保存的网页网页,点击图标即可。
      在这里插入图片描述



    参考:
    【1】:你见过最漂亮的东亚女性长什么样子?

    展开全文
  • 在使用 Photoshop 打开图片文件时,有时会遇到无法完成请求,因为JPEG标志符段长度太短(该文件可能被截断或不完整)错误,无法正常打开文件,如下图...如果仍然不好使,那么在画图工具中选择另存保存为一个其他格...

    在使用 Photoshop 打开图片文件时,有时会遇到无法完成请求,因为JPEG标志符段长度太短(该文件可能被截断或不完整)错误,无法正常打开文件,如下图所示:

    遇到这种情况时,我们可以通过系统自带的画图工具解决,在图片文件上右键 - 打开方式,选择画图,然后在画图工具中将图片重新保存一下,之后 PS 就可以正常打开这个图片了。

    如果仍然不好使,那么在画图工具中选择另存为,保存为一个其他格式,再用 PS 打开即可。

    展开全文
  • 当你需要用到html文件中的表格数据时,你可能会想到复制粘贴,将表格数据粘贴到EXCEL表中,但如果表格太多,或者数据量很大,复制粘贴的工作量还是很...本文提供一种爬虫的方法,爬取hrml中的表格数据并保存为csv文件。
  • OpenCV:imwrite函数保存图片

    万次阅读 2017-03-15 19:06:33
    imwrite函数功能:用于将图像保存到指定的文件,可以各种格式的图像。 函数原型: bool cv::imwrite(const String & filename, InputArray img, const std::vector<int> & params = std::vector...
  • OpenCV中如何保存Mat矩阵

    千次阅读 2018-03-20 21:41:41
    在有的项目中,需要保存对比实验的结果(类型Mat)。主流的有两种方案,一是imwrite,二是使用FileStorage(参考这里)。OpenCV保存任意类型的Mat
  • 2、OpenCV加载、显示、保存图像

    千次阅读 2021-01-04 14:49:49
    Opencv加载、显示、保存图像一、Opencv加载图像二、判断图像是否加载成功三、窗体显示图片四、保存图像五、完整代码示例六、其它关于图像保存的代码例子七、致谢 一、Opencv加载图像 1、所用函数原型: Mat cv::...
  • Windows延缓写入失败:Windows无法某盘某文件保存所有数据,数据已经丢失。这个错误可能是由于您的计算机硬件或网络连接的失败导致的。 提示“Windows-延缓写入失败”,一般都是由于硬盘坏道故障引起的。可以挂...
  • Flash数据读取和保存

    千次阅读 2019-05-24 15:05:41
    实现方法 Flash数据读取和保存的目的是在单片机的程序存储区开辟一块空间专门用来保存系统需要记忆的参数和数据...其中,数据的读取和保存方法需要根据数据的配置格式来确定,这里我们是这样定义的: 数据格式的定...
  • 摘要:许多情况下我们需要用到摄像头获取图像,进而处理图像,这篇博文介绍利用pyqt5、OpenCV实现用电脑上连接的摄像头拍照并保存照片。为了使用和后续开发方便,这里利用pyqt5设计了个相机界面,后面将介绍如何实现...
  • Android实现View截图并保存到相册

    千次阅读 2019-01-10 12:13:46
    Android实现View截图并保存到相册一、目标1. 效果图2. 下载地址二、需求设计三、准备工作1. 实现View截图2. 保存Bitmap到文件3....实现第1栏第1个图标”图片“功能,对View进行截图,并保存到图库。 2. 下载地...
  • jsp实现数据保存

    千次阅读 2012-08-28 09:27:19
    一、Session保存用户名 我们在上网的时候,经常遇到这种情况: ... ... ...其实这些效果是使用了session的一个...使用会话可以使我们在使用浏览器与服务器进行多次请求中保存和使用数据 首先在注册成功后,我们可以在ses
  • 使用imwrite调整保存的图片质量

    千次阅读 2018-01-17 19:32:36
    针对这个问题,忙了大半天,到处翻阅资料,终于知道为什么了。先举个例子说明自己遇到的问题,为了看出效果,我特意用了一个高分辨率的图片做实验。比如我有如下的一个233M的图片经过下面的程序读进内存,再次保存后...
  • 文件加解密 - 密钥保存

    千次阅读 2019-07-16 19:37:52
    当我们想做一个加解密系统的时候,有个问题还是绕不过的,就是如何保存加解密的密钥。 通常如果想做文件的加解密,都是用的对称算法,一般就是AES或者DES。 那这里有个问题密钥怎么管理呢? 基本上可以分两种: ...
  • SharedPreferences更改数据后多处读取,数据丢失或延时的问题的原因和解决办法先说一下遇到这个问题的场景,由于我的项目中使用了SharePreference保存一个状态,然后通过获取这个状态来控制后面的逻辑,也就是这个状态是...
  • 使用imwrite改变保存的图片质量

    千次阅读 2018-04-09 15:00:02
    一、imwrite 通常保存图片会被压缩 &nbsp;&nbsp;&nbsp;&nbsp;在使用OpenCV过程中经常采用imwrite来保存图片,默认情况下,采用了默认是图片保存质量进行保存,实际操作中也可以通过改变这个参数来...
  • IOS 使用词典保存数据详解

    千次阅读 2016-08-17 10:06:30
    在Objective-C语言中 词典对象就是做这个事情的,不过在同一个词典对象中可以保存多个不同类型的数据,不像Java与C 只能保存声明的相同类型的数据,它的关键字NSDictionary与NSMutableDictionary。阅
  • 登陆页面实现保存帐号密码功能

    万次阅读 2014-05-20 23:23:32
    }else{//保存Cookie的时间长度,单位秒 nameCookie.setMaxAge(7*24*60*60); pswCookie.setMaxAge(7*24*60*60); } //加入Cookie到响应头 response.addCookie(nameCookie); response.addCookie...
  • 本篇文章,将学习如何读取视频,显示视频和保存视频。分别学习从相机和视频文件中读取视频。主要学习类VideoCapture和类VideoWrter的使用。 环境:Windows 7(64) Python 3.6 OpenCV3.4.2 一、视频的读取与显示 ...
  • 作为结束标志,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存。 下面是我写的程序源代码,我通过VS2010,编译通过,运行正常。 下面是生成的test.txt文件和其中的内容: 下面是...
  • 环信集成本来认为很简单的,有现成的UI,照着文档直接傻瓜操作就行,没曾想聊天记录不能时间保存,于是乎就有了这篇记录环信坑的笔记  在下载的环信的SDK时候里面会有两个包,一个完整版的,一个简洁版的,导入...
  • ABP天坑--UOW自动保存修改

    千次阅读 2018-06-08 15:24:28
    ABP项目也做了挺久了,实际上也没碰上太多的...这样多个系统之间如何共享文件就成了个问题,所以当初设计上采取了个偷懒的方式,直接将文件保存到MySql中,所有系统要用这些文件时,都去数据库中读取……上面描述...
  • 本篇文章,将学习如何读取图像、如何显示图像以及如何保存图像。这是学习OpenCV最基本的问题。 主要是学习几个函数的使用,这几个函数在今后的学习中经常用到。 环境:Windows XP(X86) Python 3.4 OpenCV3.1.0...
  • 读取、显示、保存图片

    千次阅读 2014-03-23 11:42:33
    OpenCV中最基本的操作:读取、显示、保存图片。 OpenCV2.0版本引入与Matlab命令相同的函数,imread、imshow、imwrite,获取图片更将方便。 读取文件 imread Mat imread(const string& filename, int flags=1 ) 其中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 251,977
精华内容 100,790
关键字:

保存图标为什么长这样