自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(161)
  • 资源 (6)
  • 收藏
  • 关注

原创 鸿蒙HarmonyOS应用开发:多码识别

华为HMS Core的扫码接口更适用于简单的个人使用。在商业环境,如货架、医用试管、图书馆书架等,常常遇到复杂的多码扫描需求,这时需要专业的扫码SDK。尽管当前市场上的主流商业SDK尚未支持鸿蒙HarmonyOS,但我们仍可以通过HTTP请求来调用扫码服务,满足在鸿蒙系统上的多码扫描需求。

2023-10-24 11:05:15 1010 1

原创 鸿蒙HarmonyOS应用开发:扫描仪文件扫描

华为鸿蒙HarmonyOS已经发展到4.0,使用ArkTS作为开发语言。这篇文章结合Dynamsoft Service开发一个简单的鸿蒙应用,用来获取办公室里连接PC的扫描仪(),把文档扫描到手机里。

2023-10-20 13:23:14 1197

原创 使用C++实现Windows和Linux的Flutter文档扫描插件

文档扫描应用大都是移动应用。结合手机摄像头可以实现文档拍摄,边缘检测,自动剪裁,透视矫正,滤镜等功能。但是桌面办公也少不了文档处理。这里分享下如何使用Dynamsoft Document Normalizer C++ SDK实现用于桌面文档处理的Flutter插件。需要快速体验可以直接访问https://pub.dev/packages/flutter_document_scan_sdk因为C++ SDK只提供了Windows和Linux的库,所以我们创建一个支持Windows和Linux的Flutter

2022-12-08 10:51:19 1110 1

原创 如何使用.NET MAUI开发Android扫码应用

NETMAUI是Xamarin的进化版,如果你已经用了Xamarin,那么可以尝试把工程移植到.NETMAUI。这篇文章分享下我的移植心得。

2022-07-15 10:29:59 7104

原创 解密Python C++库打包到wheel的正确方法

如果你用CPython写了一个扩展,然后要打包到wheel中发布,应该如何操作?你搜索网络,不管英文还是中文,得到的都是一知半解的答案。根据官方的粗浅文档,你可能可以很快完成一个wheel包,但和真正的wheel包差了十万八千里。这里主要考虑两个问题:1.包的结构,2.依赖库如何打包。因为涉及C/C++代码,那么最好的学习资源就是opencv-python的源码。理想情况下,做出来的包应该可以通过命令在任意平台安装。那么opencv-python是如何来为不同平台编译wheel的?通过源码可以发现,它用到了

2022-06-09 17:54:50 1005

原创 不用mac环境,如何使用Visual Studio在Windows中开发iOS应用

Xamarin允许开发者使用C#来开发Android和iOS应用。在Xamarin的基础上,微软又进一步推出了MAUI。早期的时候,使用Visual Studio开发iOS应用必须远程连接mac,也就是说mac是必不可少的。不过现在Visual Studio已经可以在Windows上直接编译调试iOS应用,开发阶段mac不再是必需品。虽然看起来非常棒,但是实际使用的时候会碰到很多问题。这篇文章分享下如何在Windows上成功编译运行iOS应用。软件安装Visual Studio 2022 (支持Xam

2022-05-09 15:24:46 5400

原创 如何用SwiftUI快速创建iOS摄像头QR扫码应用

以前的iOS开发,UI用的是Storyboard。这几年苹果推出了SwiftUI,使用一套代码就可以同时支持iPhone和iPad,节约开发成本。由于很多的iOS SDK都是基于UIKit开发的,要集成到SwiftUI里需要包装下。这篇文章分享下如何使用Dynamsoft Camera Enhancer, Dynamsoft Barcode Reader在SwiftUI中快速实现摄像头QR扫码应用。在M1 Mac上搭建开发环境Xcode 13.2.1Cocoapods安装homebrew /bi

2022-03-04 17:16:50 3646

原创 在Android上运行基于TensorFlow Lite训练的二维码检测模型

二维码定位可以使用传统的图形学或者机器学习。那么哪种在手机上运行的效率更高?我们可以动手实验下。使用TensorFlow Lite训练二维码检测模型在Android应用中使用TensorFlow Lite API源码https://github.com/yushulx/android-camera2-preview-qr-code-scanner...

2022-01-14 17:20:17 2911

原创 实现32/64位Windows虚拟扫描仪自定义图片加载

大部分扫描仪都支持TWAIN协议,为了方便开发扫描仪应用程序,TWAIN组织在GitHub上放了虚拟扫描仪的示例代码。这份代码只支持加载自带的TWAIN图标,ADF连续扫描也不起作用。为了更真实的模拟扫描不同的图片,我们可以对源码做些修改。文档扫描流程修改代码之前,我们可以先了解下扫描文档的流程。虚拟扫描仪就是在source这层。开发测试环境开发Visual Studio 2017及以上(官方提供了比较早的工程)Qt 5.12.11 msvc2017或者Qt 5.12.11 msvc2017

2021-11-22 16:16:24 2714

原创 如何实现支持摄像头二维码扫描的Flutter自定义Widget

前些日子写了一个flutter_barcode_sdk,配合已经存在的Flutter camera插件可以实现摄像头扫码。通过Dart传递数据,再到Java去做解码,有些多余。所以这篇文章的目的是把摄像头控制和二维码扫描合并到Android代码里,然后封装出一整个插件。基于Android TextView的Flutter自定义Widget把Flutter Text Widget改成Flutter Camera Widget集成barcode SDK,完成支持摄像头二维码识别的Flutter插件..

2021-11-02 16:53:53 2108

原创 Python截屏工具,识别屏幕中的二维码

看网页的时候出现二维码怎么快速识别?一般人可能会掏出手机。手机识别有两个问题:1,对着屏幕,会有摩尔纹的干扰。2,识别结果不能在电脑上立刻使用。如果做个截屏小工具来识别,会方便很多。安装Python依赖包pip install pillow opencv-python dbr pyside2屏幕截图识别二维码的步骤用Qt搭建UI创建一个自定义的全屏Qt widget监听鼠标事件,获得区域用PIL里的接口根据坐标抓图调用Dynamsoft Barcode Reader的接口识别二维码代

2021-10-14 15:45:58 1858

原创 Qt C++搭建桌面扫码程序

我们在评估图像算法SDK的时候,使用带界面的示例程序会比命令行程序方便直观很多。因为我们不仅要得到识别结果,还需要知道识别区域是否准确。这篇文章分享下如何用Qt C++ SDK和Dynamsoft Barcode Reader来搭建跨平台的桌面扫码程序。下载QtWindowsLinux sudo apt-get install qt5-defaultDynamsoft Barcode Reader v8.6 C++ SDKCMakeQt Windows 安装在Windo

2021-08-27 14:27:18 672

原创 龙芯MIPS64上实现C++,Python一维码,二维码识别

Dynamsoft最近提供了支持MIPS64的一维码,二维码的C++ SDK。我在统信UOS上用C++和Python上做了测试,可以正常使用。SDK下载Mips64el.zip统信UOS环境配置使用sudo apt update的时候可能会碰到错误:无法安全地用该源进行更新,所以默认禁用该源。解决方法是在/etc/apt/sources.list中更换源deb https://mirrors.aliyun.com/debian stable main contrib non-free。C++识别一

2021-07-15 17:09:07 522

原创 费尽周折,终于在华为watch3上成功运行hello world

为了运行一个华为手表的hello world,花了我大量的时间,说实话,真的很不爽。这里有华为文档的因素,有华为产品的因素,还有对比谷歌之后失望的因素。但是,最终还是跑起来,还是希望支持国货,华为好好加油吧!现在我分享下这个曲折的过程。DevEco Studio连接华为Watch3这个连接真的是折腾的要命。按照安卓开发的习惯,进入设置>关于,连续点击版本号,打开开发者模式。这里没有任何问题。打开开发者选项之后,会看到HDC调试,通过WLAN调试。全部打开。这个时候你可能会在WLAN下看到一个I

2021-06-24 17:13:02 5973 4

原创 Web端QR二维码扫描实现

要在Web端实现基于摄像头的实时QR二维码扫描,需要包含摄像头控制和QR二维码解码两个部分的代码。Dynamsoft把这两部分封装在了一个JS SDK中,使用起来非常方便。开发文档https://www.dynamsoft.com/barcode-reader/programming/javascript/api-reference/BarcodeScanner.html?ver=latest快速创建Web QR扫描程序我们写一个最简单的hello world程序。<!DOCTYPE htm

2021-06-16 17:08:22 2711

原创 支持一维码,二维码识别的Flutter插件开发:iOS & macOS

过去几周,我分享了如何创建覆盖Windows, Linux, Android, Web的Flutter一维码,二维码插件,使用的编程语言包括C++,Java,JavaScript和Dart。本周将分享使用Swift实现Flutter iOS和macOS插件。Flutter插件下载https://pub.dev/packages/flutter_barcode_sdk感兴趣的可以like下。Flutter iOS, macOS插件实现上周为了实现Linux插件,开发平台从Windows切换到Linu

2021-06-01 16:10:17 769 3

原创 Flutter C++插件:Linux桌面应用开发

我的Flutter一维码,二维码插件已经支持Android,Windows和Web。这篇文章继续添加新的平台:Linux。Flutter插件下载https://pub.dev/packages/flutter_barcode_sdk学习资源https://flutter.dev/desktophttps://github.com/google/flutter-desktop-embeddinghttps://github.com/flutter/samples/tree/master/expe

2021-05-25 16:49:35 1267

原创 Flutter Web插件实现:打通JavaScript和Dart

之前分享了如何在Flutter插件中支持Android和Windows,这篇文章将增加Web插件的实现方法,以及创建一个简单的web一维码,二维码识别应用。参考资源https://dart.dev/web/js-interophttps://github.com/grandnexus/firebase-darthttps://pub.dev/packages/js开发Flutter Web插件Web插件开发,主要问题是如何实现Dart和JavaScript的相互调用。官网提供的fireba

2021-05-13 15:19:14 1127 3

原创 使用C++实现Flutter Windows插件

上周实现的Flutter条形码插件已经发布到https://pub.dev/packages/flutter_barcode_sdk,平台相关部分只包含了Android的Java代码。这周新增用于Windows的C++代码。后续计划还包含iOS和Web。关于Dynamsoft C++ Barcode SDK安装包下载:https://www.dynamsoft.com/barcode-reader/downloads30天试用序列号:https://www.dynamsoft.com/custom

2021-04-29 16:52:14 1928

原创 从0开始搭建Flutter条形码二维码扫描插件及应用

Google今年推出了Flutter 2。一套Dart代码可以覆盖桌面,web和移动开发,大大降低跨平台应用开发成本。然而平台相关的逻辑还是需要用相应的本地代码去实现。这篇文章分享如何从0开始,搭建发布Flutter的条形码二维码扫描插件,以及如何使用该插件来实现一个Android的扫码应用。Flutter安装参考Flutter中国区安装指南:https://flutter.dev/community/chinaLinux, mac配置环境变量: export PUB_HOSTED_URL=http

2021-04-23 10:58:38 979

原创 国产操作系统上实现基于Web的文档扫描应用

国产操作系统的普及离不开软件的支持。在自动化办公方面,Dynamic Web TWAIN SDK已经可以支持目前主流的国产系统:银河麒麟,中标麒麟,统信UOS。支持的CPU架构包括amd64, arm64和mips64。因此,要为国产系统打造基于Web的电子文档扫描管理软件非常方便。基于Web的文档扫描应用国产OS都是基于Linux。Linux通过SANE协议访问文档扫描仪。Dynamic Web TWAIN支持Windows, Linux和Mac上的所有扫描协议。MIPS64 统信UOS统信UOS

2021-03-16 11:28:53 895 4

原创 如何用Java和Kotlin实现高性能桌面条形码扫描

很多做Java开发的喜欢用ZXing实现扫码功能,但是ZXing的功能有限。如果要开发企业级的产品,就需要企业级的SDK。Dynamsoft Barcode Reader作为企业级的扫码SDK,提供了移动和桌面版本。SDK基于JNI封装,能够给Java程序提供最好的性能。使用Gradle创建Java/Kotlin工程习惯安卓开发的都很熟悉Gradle。Gradle用于桌面程序开发也很方便。用Gradle命令创建一个新的工程:$ gradle init Select type of project

2021-03-10 16:52:58 671

原创 如何在Travis CI中为Windows, Linux和macOS配置Python环境

Travis CI提供了很多虚拟机环境,但是没有想象中方便。比如要运行Python,只有Linux和macOS是自带的,Windows需要安装。不同的操作系统配置方式也不同,少不了一番折腾。Travis CI的Python 3.x环境搭建Linux自带Python,非常方便,只需要设置Python版本即可。CPU可以选择AMD64和ARM64:jobs: include: - name: "Python 3.6.0 on AMD64 Linux" python: 3.6

2021-03-03 15:58:49 201 1

原创 在统信UOS上运行GUI条形码识别程序

最近在VMWare里安装了统信UOS虚拟机,并测试了一下Python Qt写的条形码识别程序能否正常运行。VMWare安装统信UOS下载统信UOS桌面个人版。在VMWare上创建虚拟机,导入ISO文件,选择Debian 10。磁盘分配要超过64G,不然无法安装。最终配置:运行系统,打开终端运行sudo apt update。这时会提示要求激活开发者权限。到设置里激活:现在可以正常使用命令行工具了。统信UOS运行桌面条形码识别程序安装pip3:sudo apt updatesudo

2021-03-02 14:11:31 645

原创 如何在手机浏览器中控制扫描仪做文档扫描

办公室里扫描仪必不可少。现在智能化办公,有时候我们会希望文档扫描之后直接传输到手机里。如果用的是带WiFi的智能扫描仪,那么可以通过安装app来获取电子文档。如果用的是普通扫描仪,那么只能先通过PC获取扫描文档,然后再拷贝到手机里,很不方便。这篇文章分享适用于手机浏览器的解决方案。既不需要安装app,也不需要通过PC拷贝。环境搭建步骤把扫描仪通过USB接口连接到一台Windows主机上下载安装Dynamic Web TWAIN SDK申请一个30天免费试用的序列号在Windows的

2021-02-23 14:05:05 1208

原创 使用Travis CI实现C++ CMake工程多平台编译

手里有个C++的CMake工程,想要针对不同的平台编译,包括Windows,Linux,macOS。其中Linux又包含了x64,arm32(树莓派)和arm64(Jetson Nano)。没有相应的设备怎么办?Travis CI提供了各种操作系统和CPU指令集的虚拟机,可以满足需求。配置CMakeLists.txt我手里有5个不同平台的动态链接库:x64 Windowsx64 LinuxARM32 LinuxARM64 LinuxmacOS分别放在5个目录里。现在需要在CMakeL

2021-02-23 11:16:18 575

原创 如何用Qt和Python创建跨平台的桌面扫码程序

最近想为树莓派写个带界面的扫码应用,想到了Qt。Qt+Python搭建跨平台的界面应用非常快。安装Python依赖OpenCVpython3 -m pip install opencv-pythonDynamsoft Barcode Readerpython3 -m pip install dbrPySide2Windows, Linux and macOSpython3 -m pip install PySide2Raspberry Pi OSapt-get inst

2021-01-07 14:44:41 391

原创 Apple M1上如何用pip安装x86的Python Wheel包

最近可能很多人在犹豫要不要买Apple M1的苹果电脑,担心兼容性问题。其实完全不用担心。Apple M1绝对是强大的生产力工具。这里分享下如何用pip安装x86的Python wheel包。安装pipMac自带Python 2.7。如果第一次在terminal中运行Python3,会提示安装。点击安装之后。就可以运行Python3。接下来安装pip:curl https://bootstrap.pypa.io/get-pip.py -o get-pip.pypython3 get-pip.p

2020-12-15 20:31:49 3264 1

原创 控制Tello无人机扫描条形码

一直想玩无人机,之前租了一个大疆的发现禁飞。好在最近发现了Tello,买来过了一把瘾。顺便试了下集成条形码扫描功能。现在有很多仓储管理会用到无人机来扫码做库存盘点。Python 3控制Tello无人机DJI的官方GitHub仓库里已经放了示例代码dji-sdk/Tello-Python。不过这份代码只能支持Python 2.7,而且也好久无人维护。要在Python 3上运行这份代码需要做些修改。首先获取源码:git clone https://github.com/dji-sdk/Tello-Py

2020-12-03 16:30:06 1578 5

原创 从头开始训练一个检测QR二维码区域的YOLOv3模型

条形码和二维码在识别的时候主要包含定位和解码两个步骤。寻找码的位置,除了用传统的图像算法之外,也可以借助深度学习。那么深度学习的效率如何,我做了一个实验。为QR二维码训练YOLOv3模型编译Darknet下载Darknetgit clone https://github.com/AlexeyAB/darknet --depth 1我的环境是Windows,所以需要安装以下工具:CMake 3.18.4Visual Studio 2019 Community editionOpenCV 4

2020-11-10 14:42:51 3936 11

原创 条形码区域解码:Web小工具

条形码解码首先要做定位,找到条形码在图像中的区域。但是有时候受图像质量影响,算法找寻的区域可能产生偏差,最后导致解码失败。这个时候,可以尝试手动选择区域,来辅助条形码的识别。Web Canvas框选识别条形码需求:在网页中加载条形码图像。使用鼠标框选出条形码的区域。识别区域中的条形码。Web Canvas图像显示创建input选择文件。获取文件对象之后,使用FileReader读取并绘制到canvas上。如果读取的图像太大,可以设定一个最大缩放值:<input type="file

2020-10-13 15:19:40 1408

原创 第一个RISC-V条码识别应用

Dynamsoft最近为开发者提供了测试版的RISC-V条形码SDK。感兴趣的可以玩一下。RISC-V条码识别SDK下载由于没有正式发布,开发者需要下载:Linux压缩包 dbr-linux-7.6.tar.gzRISC-V库文件 libDynamsoftBarcodeReader.so下载之后解压,并替换安装包中的库文件:$ file libDynamsoftBarcodeReader.so libDynamsoftBarcodeReader.so: ELF 64-bit LSB sha

2020-09-30 16:27:32 315

原创 搭建RISC-V编译环境与运行环境

我们现在芯片被美国卡脖子,所以RISC-V是大势所趋。华为鸿蒙提供的编译器(https://repo.huaweicloud.com/harmonyos/compiler/)里也有RISC-V。虽然现在硬件资源比较少,但是通过软件模拟环境,可以提早做好准备。RISC-V GNU Toolchain源码获取要体验RISC-V,首先需要安装交叉编译器。然而国内的网络很差,想要在GitHub上拿到源码(https://github.com/riscv/riscv-gnu-toolchain)编译非常困难。比

2020-09-25 16:03:04 10862 5

原创 适用于Nvidia Jetson Nano的ARM64条形码SDK

从7.6版本开始,Dynamsoft的条形码SDK开始支持ARM64。这意味着开发者可以在Nvidia Jetson Nano上构建条形码识别应用。Aarch64 Python条形码SDKNvidia Jetson Nano官方提供的操作系统是Ubuntu 18.04 Aarch64。现在可以在Pypi上找到Aarch64版本的Dynamsoft Barcode SDK:https://pypi.org/project/dbr/#files.支持的Python版本包括3.6,3.7和3.8。安装

2020-09-22 16:23:12 581

原创 如何创建Salesforce AppExchange应用

Salesforce的AppExchange中提供了丰富的应用。如果你是Salesforce用户,也可以通过开发自己的应用来扩展Salesforce的功能。那么要创建发布一个应用,需要哪些步骤?设置Salesforce环境Salesforce的账号是可以免费创建的。如果需要发布应用,需要加入partner社区。当你登入Salesforce账号的时候,会发现Salesforce提供了两种UI。你可以选择一种来操作。不同的UI,操作是有不同的。你可以创建多种类型的账号,并在Environment

2020-09-18 15:17:20 1113

原创 Blazor条形码识别应用:在Web中运行C#和JavaScript代码

Blazor是微软开发的Web框架,目的是让开发者使用C#和HTML来开发Web应用。然而,JavaScript必不可少。所以微软也提供了C#和JavaScript互相调用的方法。这篇文章分享下如何用Blazor WebAssembly和Dynamsoft JavaScript Barcode SDK来创建一个简单的Web应用,用于识别图片中的条形码。关于BlazorBlazor提供了两个模板:Blazor WebAssembly和Blazor Server。Blazor WebAssemblyB

2020-09-08 15:46:05 1214 1

原创 Dynamsoft vs Scandit: 基于WebAssembly的JavaScript Barcode SDK深度评测

如果你想开发基于浏览器的HTML5条形码扫描应用,你可以在Google首页中找到最好的JavaScript Barcode SDK.Dynamsoft和Scandit这两家公司都开发了基于WebAssembly的条形码SDK,可以让Web应用的扫码性能接近原生应用。我们可以从hello world入手,来深度体验下这两个SDK之间的差异。Hello World快速入门Dynamsoft网址:https://www.npmjs.com/package/dynamsoft-javascript-bar

2020-08-27 16:39:19 1115

原创 扫描仪Web远程控制

扫描仪和电脑通常是1对1连接的。在办公场景中,如果有多人需要使用扫描仪,要么共用一台电脑,要么购买多台扫描仪分别连接不同的电脑。如果能够使用浏览器,通过网络直接访问扫描仪,那么既方便,又省钱。Dynamsoft的Dynamic Web TWAIN v16.1.1提供了网络解决方案。通过Websocket的连接,用户可以在手机和桌面浏览器中操控扫描仪将文档电子化。Dynamic Web TWAIN是什么Dynamic Web TWAIN是Dynamsoft提供的跨平台扫描仪SDK。包含了一个平台相关的服务

2020-08-20 14:24:09 1588 4

原创 WebGL彩图转灰度图,提升Web条形码识别性能

图像识别算法通常都要把彩图,转成灰度图,再转成二值图。如果把图像处理部分放到GPU上,就可以减少CPU的时间消耗。这篇文章分享下用WebGL把摄像头传入的彩图转成灰度图,以此提高Web条形码SDK的解码性能。Web条形码识别使用Dynamsoft JavaScript Barcode SDK(https://www.npmjs.com/package/dynamsoft-javascript-barcode)可以快速实现一个Web条码扫描App。比如下面的代码,可以直接创建一个带webcam的扫码app

2020-07-29 13:33:04 396

原创 如何在IE中打开USB摄像头扫描条形码

IE不支持WebRTC,所以没有办法通过JS接口在浏览器中直接访问USB摄像头。解决的方法就是通过本地启动一个服务去获取摄像头数据,然后发送到IE的web页面上,通过img元素不断刷新来显示,这个在上一篇文章中已经说过。这篇文章是基于上一篇里Node.js的代码,增加条形码扫描功能。基于C/C++的Node.js条形码模块编译C/C++的封装代码在https://github.com/Dynamsoft/nodejs-barcode。用于解码的接口是decodeBufferAsync()。以下是相关的

2020-07-17 13:52:23 773

OS X and iOS Kernel Programming

OS X & iOS核心编程英文原版

2015-09-22

Advanced Mac OS X Programming

Mac OS X高级编程英文版。本书共有23章:1.C and Objective-C 2.The Compiler 3. Blocks 4.Command-Line Programs 5.Exceptions, Error Handling, and Signals 6.Libraries 7.Memory 8.Debugging With GDB 9.DTrace 10.Performance Tuning 11.Files, Part 1: I/O and Permissions 12.Files, Part 2: Directories, File Systems, and Links 13.NSFileManager - Cocoa and the File System 14.Network Programming With Sockets 15.CFRunLoop 16.kqueue and FSEvents 17.Bonjour 18.Multiprocessing 19.Using NSTask 20.Multithreading 21.Operations 22.Grand Central Dispatch 23.Accessing the Keychain

2014-08-21

SourceAnywhere SVN Bridge

一个简单的桥接工具,让开发者能够通过SVN客户端,把代码上传到SourceAnywhere Server中,轻松的在本地机器上部署一个免费的SVN Server。

2014-08-21

TWAIN虚拟扫描仪

TWAIN虚拟扫描仪,支持Win7/8。不管是开发网页版的TWAIN应用还是桌面版的TWAIN应用,都可以使用。不需要购买扫描仪就可以完成开发。

2014-08-20

SourceAnywhere 6.0使用手册

SourceAnywhere 6.0的使用指南,英文原版

2014-08-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除