2016-02-01 17:14:26 a704755096 阅读数 1079

手机客户端修剪图片并上传图片到服务端比较经常碰到,比如设置用户头像以及裁剪图像大小的功能,有打开相机拍照和选择相册2种,以下简单说下几个要点:安卓7.0以上兼容

1.选择图片 修剪图片

 

import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.Toast;
public class PhotoUtils{
	private PhotoUtils(){};
	    /** 
	     *拍照 
	     */  
	    public static void photoGraph(Activity activity,String filePath){  
	    	if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
	    		Toast.makeText(activity, "SDcard不可用", Toast.LENGTH_SHORT).show();
	    		return;
	    	}
	    	File file = new File(filePath);
	    	if ( !file.exists() ) {
	    	file.getParentFile().mkdirs();
	    	}
	    	Uri uri = Uri.fromFile(file);
	    	
	        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
	        intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);//设置SD卡读写权限
	        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());  
	        activity.startActivityForResult(intent,1);
	    }  
	   /** 
	     * 选择相册 
	     */  
	    public static void fromAlbum(Activity activity,String filePath){  
	      File file = new File(filePath);
    	  if ( !file.exists() ) {
    	  file.getParentFile().mkdirs();
    	  }
    	  Uri uri = Uri.fromFile(file);
    	  
	      Intent intent=new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.INTERNAL_CONTENT_URI);
	      intent.setType("image/*");
		  intent.putExtra("crop", "true");
//	      intent.putExtra("aspectX", 360);
//	      intent.putExtra("aspectY", 225);
//	      intent.putExtra("outputX", 600);
//	      intent.putExtra("outputY", 500);
	      intent.putExtra("return-data", true);
	      intent.putExtra("scale", true);//黑边
	      intent.putExtra("scaleUpIfNeeded", true);//黑边
	      intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);  
	      intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());  
	      activity.startActivityForResult(intent,2);  
	   }  
	   /**  
	    * 裁剪原始的图片  
	     */  
	    public static void cropPhoto(Activity activity,String filePath) { 
	    	File file = new File(filePath);
	    	if ( !file.exists() ) {
	    	file.getParentFile().mkdirs();
	    	}
	    	Uri uri = Uri.fromFile(file);
	    	
	        Intent intent = new Intent("com.android.camera.action.CROP");  
	        intent.setDataAndType(uri, "image/*");  
	        intent.putExtra("crop", "true");  
//	        intent.putExtra("aspectX", 360);
//	        intent.putExtra("aspectY", 225);
//	        intent.putExtra("outputX", 600);
//	        intent.putExtra("outputY", 500);
	        intent.putExtra("return-data", true);
	        intent.putExtra("scale", true);//黑边
	        intent.putExtra("scaleUpIfNeeded", true);//黑边
			intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
			intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
			activity.startActivityForResult(intent,3);
	    } 
	    
//	    @Override
//		   public void onActivityResult(int requestCode, int resultCode, Intent data) {
//			if(requestCode==1&&resultCode==this.RESULT_OK){
//				PhotoUtils.cropPhoto(this,filepath);
//			}
//			if((requestCode==2&&resultCode==this.RESULT_OK)||(requestCode==3&&resultCode==this.RESULT_OK)){
//				String path=Userdata.FILE.PHOTO_PATH;//默认机型路径
//				if (data!=null&&data.getData()!=null&&data.getExtras()==null){
//				String p=data.getData().toString();//其它机型
//				if(p.contains("file:///storage/sdcard0")) {
//				path=p.replace("file:///storage/sdcard0", Environment.getExternalStorageDirectory().getAbsolutePath());
//				}
//				if(p.contains("file:///storage/emulated/0")) {
//				path=p.replace("file:///storage/emulated/0", Environment.getExternalStorageDirectory().getAbsolutePath());
//				}
//				}
//				final Bitmap bm = BitmapFactory.decodeFile(path);//注意OOM
//				File file = new File(path);
//			}
//			super.onActivityResult(requestCode, resultCode, data);
//		   }
	
}
	@

2.上传图片

 

List list=new ArrayList();//存储上传的图片字符串
		for(int i=0;i<mlistImage.size();i++){
		byte[] bty = BitmapUtils.convertBitmap2Bytes(mlistImage.get(i));//自定义图片转byte[]
		list.add(Base64.encodeToString(bty, Base64.DEFAULT));//base64图片字符串
		}

 

 来    源:http://blog.csdn.net/a704755096/article/details/50619593 

旋转图片:http://blog.csdn.net/bd_zengxinxin/article/details/39697597

加背景框:http://blog.csdn.net/yanzi1225627/article/details/8622257

2018-11-30 14:33:41 u014285910 阅读数 214

应用SSD进行物体检测,做了一个数据集,命名规则如下:

 

发现每张图片的大小不一样,需要对图形进行修剪

1.修剪代码如下所示:

import cv2
import os
dir_name="/home/kd/PandaDetect/datasets/JPEGImages/"
pic_type=".jpeg"
dir_name_re="/home/kd/PandaDetect/datasets/JPEGImagesR/"
def visitDir(dir_name):
    if not os.path.isdir(dir_name):
        print('Error:"',dir_name,'"is not a directory or does nort exist.')
        return
    else:
        global x
        try:
            for lists in os.listdir(dir_name):
                sub_path=os.path.join(dir_name,lists)
                x+=1
                print('No.',x,' ',sub_path)
                if os.path.isdir(sub_path):
                    visitDir(sub_path)
        except:
            pass
#调用函数,设置相关的参数
x=0
visitDir(dir_name)
len=x
i=1

#对120张图片进行修剪,利用循环的方式自动进行
#str()将int转换为str,字符可以直接相加
while i<=len:
    img = cv2.imread(dir_name + str(i) + pic_type)
    img_resize=cv2.resize(img, (128, 128), interpolation=cv2.INTER_CUBIC)
    cv2.waitKey(1000)
    cv2.imshow("picture",img_resize)
    cv2.imwrite(dir_name_re + str(i)+"r" + pic_type, img_resize)
    i+=1


 

2019-06-24 15:30:43 Tanner_SL 阅读数 57

通过TFTP工具在linux系统中移植内核到miniS3C2440开发板

首先是在linux系统中进行内核的配置和编译

获取内核源代码:

  1. 移植好的内核
  2. 从社区下载内核,完成移植http://www.kernel.org/pub/linux/kernel/v2.6/

然后借助Samba服务器,从Windows中复制内核源码包含到宿主机fedora共享目录

解压内核源码包

tar -xvzf linux-2.6.32.2.tar.gz

内核的配置:

1. 清除临时文件、中间文件和配置文件.进入linux-2.6.32.2文件夹里面执行命令参数:

make clean

remove most generated files but keep the config

make mrproper

remove all generated files + config files

make distclean

mrproper + remove editor backup and patch files

确定目标系统的软硬件配置情况,使用如下命令之一配置内核:

make config 基于文本模式的交互式配置 。

make menuconfig 基于文本模式的菜单型配置。(推荐使用

make oldconfig 使用已有的配置文件(.config ),但是会询问新增 的配置选项 。

make xconfig 图形化的配置(需安装图形化系统)

2.在原有配置文件的基础上进行配置修改,拷贝arch/arm/config_w35为文件.config

#cp config_mini2440_w35  .config

3.修改内核目录下的Makefile

ARCH   ?= arm

CROSS_COMPILE  ?= arm-linux-

4.执行make menuconfig定制内核组件,以root权限执行

内核的编译

#make zlmage

编译完成后,内核镜像文件zlmage生成在arch/arm/boot/目录下

zlmage转换成ulmage

注意:kernel内核文件开始的为zImage压缩的内核镜像文件,只能被supervivi识别,但不能被u-boot识别,故如果BootLoader为U-boot时必须将zImage转换为uImage

#make zImage

编译完成后,内核镜像文件zImage生成在/arch/arm/boot/目录

zImage转换为uImage

转换命令为:

mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -n "Linux kernel Image by embedclub" -d zImage uImage

或者执行写好的执行文件mkz2uimage

内核的移植

在开发板2440中用u-boot命令进行移植:

内存地址位置:   u-boot: 0x0~0x40000

                            u-boot参数区:0x40000~0x60000

                            内核和文件系统:0x60000之后

进入mini2440开发板,进入U-boot后执行以下命令:

uImage拷贝至/tftpboot/

SecureCRT中依次输入:

u-boot@SMDK2440A> tftp 0x30008000 uImage

u-boot@SMDK2440A> nand erase 60000 500000

u-boot@SMDK2440A> nand write 0x30008000 0x60000 0x500000

/+++++++++++++++++++++++++++++++++附+++++++++++++++++++++++++++++++++++++++++++/

/***************通过tftp烧写u-boot.binnand FLASH*********/

u-boot.bin拷贝至/tftpboot/

SecureCRT中依次输入:

u-boot@SMDK2440A> tftp 0x30008000   u-boot.bin

u-boot@SMDK2440A> nand erase  0   60000

u-boot@SMDK2440A> nand write 0x30008000  0  0x60000

/********通过tftp烧写uImage内核到nand FLASH*************/

uImage拷贝至/tftpboot/

SecureCRT中依次输入:

u-boot@SMDK2440A> tftp 0x30008000 uImage

u-boot@SMDK2440A> nand erase 60000 500000

u-boot@SMDK2440A> nand write 0x30008000 0x60000 0x500000

/********通过tftp烧写YAFFS文件系统到nand FLASH*********/

root_qtopia.img拷贝至/tftpboot/

SecureCRT中依次输入:

u-boot@SMDK2440A>tftp  0x30008000  root_qtopia.img

// 通过tftp server下载root_qtopia.img至开发板内存0x30008000 地址处

u-boot@SMDK2440A> nand erase  0x560000  $filesize

//首先擦除Nand Flash从0x560000 开始,大小为0x3dac00的空间,来存放root_qtopia.img

u-boot@SMDK2440A> nand write.yaffs  0x30008000 0x560000 $filesize

//烧写root_qtopia.img至0x560000 开始的Nand Flash

u-boot@SMDK2440A> boot   //启动Linux系统

开发板设置:

启动uboot命令行,修改引导参数:

setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.102:/home/student/root_qtopia ip=192.168.1.226:192.168.1.102:192.168.1.102:255.255.255.0:SMDK2440A.arm9.net:eth0:off

保存配置:

saveenv

重新启动开发板Linux系统: boot

/*******************************************************/

启动YAFFS:

setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

saveenv

/*******************************************************/

小技巧: 通过word来复制setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0, 可以消除换行符错误。

2017-10-15 10:03:31 nameofcsdn 阅读数 779

apk下载:点击打开链接 

游戏分为5章

(1)

   

   

   

   

   

   

(2)

   

   

   

   

   

   

(3)

   

   

   

   

   

(4)

      

   

   

   

(5)

   

   

   


最后这个很白很白的树,就是最后一关了。

过关之后,又开启了隐藏关卡:蓝花关卡。

蓝花关卡难度比较大,每一章都有,只有第一章我全部完成了,后面每一章都刚好有一关我没有完成。

(1)


   

   


(2)


   

   


(3)

   

   


(4)


   


(5)


   


2013-05-05 22:41:04 songjianyue12345 阅读数 665

又到周五了,想着周末还是很嗨皮,于是晚上就去写了下linux实验报告。计科的报告从来离不开截图。想来最近应该有不少朋友要写linux报告,于是就来分享下linux截图的一点小心得。


Linux上截图是比较蛋疼的事情,qq在linux不稳定易崩溃,webqq很卡,如果用普通键盘截图只好全屏截图以后还得拿图像工具修修剪剪,各种不爽啦。


我知道的有两种方法:一种方法是用截图工具截图,这个大家可以网上搜下。因为本人用的是ubantu,自带有软件中心,但是安装总会出现问题,大家可以试试在终端敲入apt-get install +名称。下载安装,这个个人比较喜欢。如果有安装包的话,可以直接用dpki命令,我就不赘述了。

                               第二种是我比较推荐的方法,打开系统设置(基于ubantu),在“键盘”菜单选择“快捷键”设置,之后会看到区域截图,然后大家就可以设置区域截图的热键了。这个方法比较简单,但是每次截图后又出现了一个问题,假如我有五个报告,每个报告需要截很多图,而ubantu区域截图保存默认是系统自带文件,且不会记忆你的选择,这样的话,如果我想把图片分类保存的话就需要每次重新选择路径,很麻烦。我自己闲着无聊就写了个shell小程序,解决了这个小问题。代码如下:

#!/bin/sh

read x

cp ./图片/*.png  ./实验$x

rm /图片/*.png

echo "转移图片成功"


利用这个shell程序,我们就不需要那么麻烦了,每次只需要保存在图片文件夹,然后运行程序,选择文件名即可。当然这个程序是很简单的,但是看出了shell的无比强大。难怪每个linux工程师都会shell编程了


周末愉快!

栀子花如何修剪

阅读数 750

修剪草坪

阅读数 425

BST:修剪

阅读数 77

没有更多推荐了,返回首页