存档

文章标签 ‘裁剪’

php自动裁剪图片,根据指定大小裁剪居中缩略图

2020年3月12日 没有评论
/*
width和height都裁剪居中图片缩略图,生成指定width和height,当原图尺寸不够时会拉升
参数合法性由业务逻辑判断
*/
function image_center_crop($srcimage,$desimage,$deswidth,$desheight,$quality=100){
	$src_info_arr=getimagesize($srcimage);
	if(!$src_info_arr){return false;}
	$srcwidth=$src_info_arr[0];
	$srcheight=$src_info_arr[1];
	$srctype=$src_info_arr[2];
	switch($srctype){
		case 1:$im=imagecreatefromgif($srcimage);break;
		case 2:$im=imagecreatefromjpeg($srcimage);break;
		case 3:$im=imagecreatefrompng($srcimage);break;
	}
	if(!isset($im)){return false;}
	//计算高度和宽度
	$judge=(($srcwidth/$srcheight)>($deswidth/$desheight));
	$resize_w=$judge?($srcwidth*$desheight)/$srcheight:$deswidth;
	$resize_h=!$judge?($srcheight*$deswidth)/$srcwidth:$desheight;
	$start_x=$judge?($resize_w-$deswidth)/2:0;
	$start_y=!$judge?($resize_h-$desheight)/2:0;
	//绘制居中缩放图像
	$resize_img=imagecreatetruecolor($resize_w,$resize_h);
	if($srctype==3){
		imagealphablending($resize_img,false);//支持png透明必要的设置
	}
	imagecopyresampled($resize_img,$im,0,0,0,0,$resize_w,$resize_h,$srcwidth,$srcheight);
	$target_img=imagecreatetruecolor($deswidth,$desheight);
	if($srctype==3){
		imagealphablending($target_img,false);//支持png透明必要的设置
	}
	imagecopy($target_img,$resize_img,0,0,$start_x,$start_y,$resize_w,$resize_h);
	switch($srctype){
		case 1:$status=imagegif($target_img,$desimage);break;//gif不支持quality参数
		case 2:$status=imagejpeg($target_img,$desimage,$quality);break;
		case 3:
			//png的quality参数为0-9,默认为-1
			$png_quality=intval($quality/10);
			if($png_quality==10){$png_quality=-1;}
			imagesavealpha($target_img,true);
			$status=imagepng($target_img,$desimage,$png_quality);
		break;
	}
	imagedestroy($im);
	imagedestroy($resize_img);
	imagedestroy($target_img);
	return $status;
}

以上php代码可以实现php自动裁剪图片,根据指定大小裁剪居中缩略图。

分类: php学习 标签: , ,

android魅族照片剪切问题(小米?)

2015年4月22日 没有评论

魅族手机调用系统图片剪切功能的问题。
调用图片剪切的代码
/**
* 用于截取大图
*
* @param ctx
* @param uri
* @param outputX
* @param outputY
* @param requestCode
*/
public static void cropImageUri(Activity ctx, Uri uri, int outputX, int outputY, int requestCode, boolean scale) {
Intent intent = new Intent(“com.android.camera.action.CROP”);
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra(“crop”, “true”);//发送裁剪信号
intent.putExtra(“outputX”, outputX);//裁剪区的宽
intent.putExtra(“outputY”, outputY);//裁剪区的高
intent.putExtra(“aspectX”, 1);//X方向上的比例
intent.putExtra(“aspectY”, 1);//Y方向上的比例
intent.putExtra(“scale”, scale);//是否保留比例
//intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//直接输出文件
intent.putExtra(“return-data”, true); //是否返回数据
//        intent.putExtra(“outputFormat”, Bitmap.CompressFormat.JPEG.toString());
intent.putExtra(“noFaceDetection”, true); //关闭人脸检测
ctx.startActivityForResult(intent, requestCode);
}

 

参照魅族官方论坛帖子:com.android.camera.action.CROP照片剪辑的问题
具体表现为剪切完成后在onActivityResult 中取不到data数据。其他机器目前没有发现这样的问题

 

解决办法

mPhoto = extras.getParcelable(“data”);
if (mPhoto == null) {
String filePath = extras.getString(“filePath”);
if (!StringUtils.isEmpty(filePath))
mPhoto = ImageUtils.decodeSampledBitmapFromFile(filePath, 400, 600);
}

 

虽然魅族的机器没有返回data字段,但是返回了filePath,是相册选中地址的路径,可以把这个图片按尺寸获取一下。注意可能丢失剪切效果,目前暂时这样处理的。

 

分类: android 标签: ,

自动裁剪textarea的长度为对象的maxlength

2013年5月21日 没有评论

//自动裁剪textarea的长度为对象的maxlength
function autoTextareaLength_tips(objid,maxLength,tipsid) {
var curLength=$(objid).val().length;
if(curLength>=maxLength){
var num=$(objid).val().substr(0,maxLength-1);
$(objid).val(num);
return false;
}
else{
$(tipsid).html(maxLength-1-($(objid).val().length))
}
}

css.php