精华内容
下载资源
问答
  • 图片统一裁剪

    2015-10-16 17:52:19
    1,客户需求,将图片统一裁剪成统一的规格。2,七牛支持(不支持)智能裁剪的功能,比如1)如果图片小的话,统一裁剪成按照短边来裁成正方形。(不支持,建议试用ufop)2)如果图片小的话,放大后裁剪成一个规格的...

    1,客户需求,将图片统一裁剪成统一的规格。

    2,七牛支持(不支持)智能裁剪的功能,比如

    1)如果图片小的话,统一裁剪成按照短边来裁成正方形。(不支持,建议试用ufop)

    2)如果图片小的话,放大后裁剪成一个规格的正方形。(支持)

    3,支持演示:

    http://img5.bcyimg.com/coser/26518/post/176v7/80a7ee106cf311e5b6a4438f52333349.gif?imageMogr2/auto-orient/strip/thumbnail/640x640^/gravity/north/crop/640x640/quality/96
    展开全文
  • 裁剪图片

    2020-06-11 18:54:01
    同时resize到跟原始图片统一大小 ''' import cv2 import os def show_pic(img, bboxes=None): ''' 输入: img:图像array bboxes:图像的所有boudning box list, 格式为[[x_min, y_min, x_max, y_max]....]
    # - *-coding=utf-8 -*-
    '''
    将瑕疵图片的boundingbox截取下来作为新的一张图片
    同时resize到跟原始图片统一大小
    '''
    
    import cv2
    import os
    
    def show_pic(img, bboxes=None):
        '''
        输入:
            img:图像array
            bboxes:图像的所有boudning box list, 格式为[[x_min, y_min, x_max, y_max]....]
            names:每个box对应的名称
        '''
        cv2.imwrite('./1.jpg', img)
        img = cv2.imread('./1.jpg')
        for i in range(len(bboxes)):
            bbox = bboxes[i]
            x_min = bbox[0]
            y_min = bbox[1]
            x_max = bbox[2]
            y_max = bbox[3]
            cv2.rectangle(img,(int(x_min),int(y_min)),(int(x_max),int(y_max)),(0,255,0),3)
        cv2.namedWindow('pic', 0)  # 1表示原图
        cv2.moveWindow('pic', 0, 0)
        cv2.resizeWindow('pic', 1200,800)  # 可视化的图片大小
        cv2.imshow('pic', img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
        os.remove('./1.jpg')
    
    def crop_bd(img, bboxes):
            '''
            裁剪后的图片为boudingbox围起来的区域
            输入:
                img:图像array
                bboxes:该图像包含的所有boundingboxs,一个list,每个元素为[x_min, y_min, x_max, y_max],要确保是数值
            输出:
                crop_bds:裁剪后的boudingbox图像array list,(可能有多个boudingbox)
            '''
            #---------------------- 裁剪图像 ----------------------
            crop_bds = list()
            for bbox in bboxes:
                x_min = bbox[0]
                y_min = bbox[1]
                x_max = bbox[2]
                y_max = bbox[3]
                crop_bd = img[y_min:y_max, x_min:x_max]
                crop_bds.append(crop_bd)
            return crop_bds
    
    if __name__ == '__main__':
    
        from xml_helper import *
        import shutil
    
        source_bad_pic_root_path = 'F:/mx_matting/yolov3-master/data/JPEGImages'
        source_xml_root_path = 'F:/mx_matting/yolov3-master/data/Annotations'
    
        target_pic_root_path = 'F:/mx_matting/yolov3-master/data//data_croped'  #只包括有瑕疵的图片
        if os.path.exists(target_pic_root_path):
            shutil.rmtree(target_pic_root_path)
        os.mkdir(target_pic_root_path)
    
        cnt = 0
        process_flag = 0
        for parent, _, files in os.walk(source_bad_pic_root_path):
            for file in files:
                process_flag += 1
                print(str(process_flag)+'/'+str(len(files)))
                bad_pic_path = os.path.join(parent, file)
                xml_path = os.path.join(source_xml_root_path, file[:-4]+'.xml')
                img = cv2.imread(bad_pic_path)
                bboxes = parse_xml(xml_path)
    
                # #原图可视化一下
                # show_pic(img,bboxes)
    
                croped_imgs = crop_bd(img, bboxes)
                for croped_img in croped_imgs:
                    cnt += 1
                    target_pic_path = os.path.join(target_pic_root_path, file[:-4]+'_croped'+str(cnt)+'.jpg')
                    # #reize一下
                    # croped_img = cv2.resize(croped_img, (img.shape[1], img.shape[0]))
                    # #可视化一下截取的图
                    # show_pic(croped_img,[[0,0,croped_img.shape[1],img.shape[0]]])
                    #写入
                    cv2.imwrite(target_pic_path, croped_img)
    
    展开全文
  • 在系统的上传图片功能中,我们无法控制用户上传图片的大小,用户可能会上传大到几十M小到1k的的图片,一方面图片太大占据了太多的空间,另一方面,我们没办法在页面上显示统一大小的图片。所以我们需要对用户上传的...

    在系统的上传图片功能中,我们无法控制用户上传图片的大小,用户可能会上传大到几十M小到1k的的图片,一方面图片太大占据了太多的空间,另一方面,我们没办法在页面上显示统一大小的图片。所以我们需要对用户上传的图片进行缩放和裁剪,这里的缩放和平常的压缩不是一个意思,因为要实现小的图片会放大,大的图片会缩小,而且是等比例变的,图片不会显示挤压的效果。而这种操作java完全可以实现。下面分享下java缩放、裁剪图片的工具类。

    一、首先看下效果:

    1.jpg为原图,yasuo.jpg是缩放后的,caijian.jpg是在yasuo.jpg基础上裁掉两边各10像素得到的
    这里写图片描述
    这里写图片描述
    比较1.jpg,是不是既图片小了,又得到了想要的图片大小,而且图片没有被挤压? 下面来看代码:

    二、工具类:

    
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.geom.AffineTransform;
    import java.awt.image.AffineTransformOp;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    
    /**
     * 裁剪、缩放图片工具类
     * @author CSDN 没有梦想-何必远方 
     */
    public class ImgUtils {
        /**
         * 缩放图片方法
         * @param srcImageFile 要缩放的图片路径
         * @param result 缩放后的图片路径
         * @param height 目标高度像素
         * @param width  目标宽度像素  
         * @param bb     是否补白
         */
         public final static void scale(String srcImageFile, String result, int height, int width, boolean bb) {
                try {
                    double ratio = 0.0; // 缩放比例
                   File f = new File(srcImageFile);
                    BufferedImage bi = ImageIO.read(f);
                    Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);//bi.SCALE_SMOOTH  选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。
                    // 计算比例
                   if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
                       double   ratioHeight = (new Integer(height)).doubleValue()/ bi.getHeight();
                       double   ratioWhidth = (new Integer(width)).doubleValue()/ bi.getWidth();
                       if(ratioHeight>ratioWhidth){
                           ratio= ratioHeight;
                       }else{
                           ratio= ratioWhidth;
                       }
                        AffineTransformOp op = new AffineTransformOp(AffineTransform//仿射转换
                                .getScaleInstance(ratio, ratio), null);//返回表示剪切变换的变换
                        itemp = op.filter(bi, null);//转换源 BufferedImage 并将结果存储在目标 BufferedImage 中。
                    }
                    if (bb) {//补白
                       BufferedImage image = new BufferedImage(width, height,
                                BufferedImage.TYPE_INT_RGB);//构造一个类型为预定义图像类型之一的 BufferedImage。
                        Graphics2D g = image.createGraphics();//创建一个 Graphics2D,可以将它绘制到此 BufferedImage 中。
                        g.setColor(Color.white);//控制颜色
                        g.fillRect(0, 0, width, height);// 使用 Graphics2D 上下文的设置,填充 Shape 的内部区域。
                        if (width == itemp.getWidth(null))
                            g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2,
                                    itemp.getWidth(null), itemp.getHeight(null),
                                    Color.white, null);
                        else
                            g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0,
                                    itemp.getWidth(null), itemp.getHeight(null),
                                    Color.white, null);
                        g.dispose();
                        itemp = image;
                    }
                    ImageIO.write((BufferedImage) itemp, "JPEG", new File(result));      //输出压缩图片
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
         /**
          * 裁剪图片方法
          * @param bufferedImage 图像源
          * @param startX 裁剪开始x坐标
          * @param startY 裁剪开始y坐标
          * @param endX 裁剪结束x坐标
          * @param endY 裁剪结束y坐标
          * @return
          */
         public static BufferedImage cropImage(BufferedImage bufferedImage, int startX, int startY, int endX, int endY) {
                int width = bufferedImage.getWidth();
                int height = bufferedImage.getHeight();
                if (startX == -1) {
                    startX = 0;
                }
                if (startY == -1) {
                    startY = 0;
                }
                if (endX == -1) {
                    endX = width - 1;
                }
                if (endY == -1) {
                    endY = height - 1;
                }
                BufferedImage result = new BufferedImage(endX - startX, endY - startY, 4);
                for (int x = startX; x < endX; ++x) {
                    for (int y = startY; y < endY; ++y) {
                        int rgb = bufferedImage.getRGB(x, y);
                        result.setRGB(x - startX, y - startY, rgb);
                    }
                }
                return result;
            }
    }
    

    三、测试类:

    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import com.etoak.util.ImgUtils;
    
    public class Test {
        public static void main(String[] args) throws IOException {
            String path="C:/1.jpg";    //输入图片  测试要在C盘放一张图片1.jpg
            ImgUtils.scale("C:/1.jpg","C:/yasuo.jpg", 180, 240, true);//等比例缩放  输出缩放图片
    
            File newfile=new File("C:/yasuo.jpg");   
            BufferedImage bufferedimage=ImageIO.read(newfile);
            int width = bufferedimage.getWidth();
            int height = bufferedimage.getHeight();
            //目标将图片裁剪成 宽240,高160
            if (width > 240) {
                                                                /*开始x坐标              开始y坐标             结束x坐标                     结束y坐标*/
                bufferedimage=ImgUtils.cropImage(bufferedimage,(int) ((width - 240) / 2),0,(int) (width - (width-240) / 2),(int) (height)
                        );
                if (height > 160) {
                    bufferedimage=ImgUtils.cropImage(bufferedimage,0,(int) ((height - 160) / 2),240,(int) (height - (height - 160) / 2)
                            );
                }
            }else{
                if (height > 160) {
                    bufferedimage=ImgUtils.cropImage(bufferedimage,0,(int) ((height - 160) / 2),(int) (width),(int) (height - (height - 160) / 2)
                            );
                }
            }
            ImageIO.write(bufferedimage, "jpg", new File("C:/caijian.jpg"));    //输出裁剪图片
        }
    }
    
    展开全文
  • PHP图片裁剪与缩放 / 无损裁剪图片

    千次阅读 2014-07-14 11:23:27
    图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用...

    图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理。

    图片源与需要的大小:

    1 $src_img "wallpaper.jpg";
    2 $dst_w = 300;
    3 $dst_h = 200;

    剪裁图像,保证图像区域最大化显示,并按比例缩放到指定大小

    一开始采用了 imagecopyresized 方法进行图像等比缩小,实际操作后发现,图像缩小后燥点非常严重。后再换用 imagecopysampled 方法,该方法会对图像进行重新采样,对缩小的图像进行平滑处理,使清晰度得到很大提高。

    01 <?
    02 list($src_w,$src_h)=getimagesize($src_img);  // 获取原图尺寸
    03  
    04 $dst_scale $dst_h/$dst_w//目标图像长宽比
    05 $src_scale $src_h/$src_w// 原图长宽比
    06  
    07 if ($src_scale>=$dst_scale){  // 过高
    08     $w intval($src_w);
    09     $h intval($dst_scale*$w);
    10  
    11     $x = 0;
    12     $y = ($src_h $h)/3;
    13 else // 过宽
    14     $h intval($src_h);
    15     $w intval($h/$dst_scale);
    16  
    17     $x = ($src_w $w)/2;
    18     $y = 0;
    19 }
    20  
    21 // 剪裁
    22 $source=imagecreatefromjpeg($src_img);
    23 $croped=imagecreatetruecolor($w$h);
    24 imagecopy($croped$source, 0, 0, $x$y$src_w$src_h);
    25  
    26 // 缩放
    27 $scale $dst_w $w;
    28 $target = imagecreatetruecolor($dst_w$dst_h);
    29 $final_w intval($w $scale);
    30 $final_h intval($h $scale);
    31 imagecopyresampled($target$croped, 0, 0, 0, 0, $final_w,$final_h$w$h);
    32  
    33 // 保存
    34 $timestamp = time();
    35 imagejpeg($target"$timestamp.jpg");
    36 imagedestroy($target);

    无损裁剪图片

    上传图片的时候, 经常是不确定比例, 显示的时候又得统一, 这个方案可以解决

    01 <?php
    02 $image "jiequ.jpg"// 原图
    03 $imgstream file_get_contents($image);
    04 $im = imagecreatefromstring($imgstream);
    05 $x = imagesx($im);//获取图片的宽
    06 $y = imagesy($im);//获取图片的高
    07  
    08 // 缩略后的大小
    09 $xx = 140;
    10 $yy = 200;
    11  
    12 if($x>$y){
    13 //图片宽大于高
    14     $sx abs(($y-$x)/2);
    15     $sy = 0;
    16     $thumbw $y;
    17     $thumbh $y;
    18 else {
    19 //图片高大于等于宽
    20     $sy abs(($x-$y)/2.5);
    21     $sx = 0;
    22     $thumbw $x;
    23     $thumbh $x;
    24   }
    25 if(function_exists("imagecreatetruecolor")) {
    26   $dim = imagecreatetruecolor($yy$xx); // 创建目标图gd2
    27 else {
    28   $dim = imagecreate($yy$xx); // 创建目标图gd1
    29 }
    30 imageCopyreSampled ($dim,$im,0,0,$sx,$sy,$yy,$xx,$thumbw,$thumbh);
    31 header ("Content-type: image/jpeg");
    32 imagejpeg ($dim, false, 100);
    33 ?>
    展开全文
  • we-cropper应用背景:项目中有用户上传图片的功能,但是用户上传的图片长宽比例不能同意,以至于到时后来图片展示的时候图片有的被压缩变形,这时候就需要有个图片裁剪的功能,固定裁剪的宽高比例。 遇到的比较好用...
  • ######## 需要裁剪图片位置######### path_img = './GAN_img/' img_dir = os.listdir(path_img) print(img_dir) ''' (左上角坐标(x,y),右下角坐标(x+w,y+h) ''' for i in range(len(img_dir)): ...
  • 裁剪图片,20562124->512512 先将图片缩小4倍,变为531514;然后提取前512个像素,变为512512 #裁剪图片,使图片变为512*512 import os import cv2 import imutils from PIL import Image def resize_crop_image...
  • Photoshop CS3 裁剪图片指南

    千次阅读 2009-03-22 20:53:00
     先说一下为什么裁剪图片,上网下载的图片大小不一,我们需要将其裁剪成统一大小;又如我们用数码相机照的照片是非常大的,需要将该图片裁剪小一点等等有很多这样的操作都需要裁剪图片操作。 在photoshop cs3 里面...
  • 在系统的上传图片功能中,我们无法控制用户上传图片的大小,用户可能会上传大到几十M小到1k的的图片,一方面图片太大占据了太多的空间,另一方面,我们没办法在页面上显示统一大小的图片。所以我们需要对用户上传的...
  • 对于一大堆相似的图片要进行相同的裁剪,上下左右裁剪的距离都差不多,可以使用下面的宏代码,按一次快捷键即可裁剪一张图片。代码来自知乎[添加链接描述](https://www.zhihu.com/question/38836217) 下面还有一个一...
  • 近期,针对金立手机,联想手机和vivoX9等部分手机拍照或选择图册照片之后裁切各种问题统一测试和调试发现问题汇总: 1、金立手机,android(3.0.X):  照相之后,点击直接返回页面,选择相册图片也没反应,不...
  • 本文用的是小程序的裁剪框...公司本次项目功能点是需要APP上传图片,但是因为此APP功能已经与PC端打通,所以必须要做裁剪图片的功能,也就是指定图片px像素上传以及指定图片文件类型。话不多说先上代码. clk(inde...
  • 裁剪图片完成后,Android/data/console.live.camera/files/Pictures/temp.jpg就是裁剪好的图片,大小在10-20kb左右。至于裁剪图片的intent还可以放一些其他选项,大家可以自行尝试。 总结 我的手机是pixel,...
  • 1.用“裁剪”剪出两头部分 2.用“图片拼接“将两头拼接在一起。注意它默认的拼接尺寸很小,一开始我没发觉,总觉得图片变模糊了,想要清晰就将”拼接尺寸“调大。
  • 批量处理一些图片,比如添加水印、压缩图片大小、批量裁剪等需求,ps可能没办法完成批量的操作,下面这款软件由一位摄影师开发,功能包括了图片加水印、长图拼接、富文本制图、尺寸调整、图片裁剪、EXIF 读取、字体...
  • 完成图片的批量裁剪和调整大小。
  • Python+OpenCV图片批量裁剪,可以对某一个目录下指定格式的图片进行指定大小的批量裁剪
  • 随着项目的更新,现在的图片选择,裁剪,越来越倾向于将图片裁剪为正方形。原来的GalleryFinal,是支持各种形状拉伸裁剪的。有时候用户上传了一个长条的图片作为头像就比较难适配了。后来看了作者更新了该框架,就是...
  • 拍照或者相册图片裁剪后返回图片

    千次阅读 2017-11-07 10:07:21
    转载: ...相机和相册 裁剪这里不是 统一的 首先展示 相机的:  打开相机: public void openCamare() { String state = Environment.getExternalStorageState(); if (state.equal
  • OpenCV批量读取文件夹中的图片,并进行统一裁剪操作,之后并保存到新的文件夹中 ** 在参考部分博客之后,综合写出了符合自己要求的代码 具体代码如下: ```cpp #include <iostream> #include <fstream&...
  • 图片裁剪功能的实现

    2017-12-15 11:15:00
    从4月初到5月份 ,差不多一个多月,终于把裁剪图片的功能码出来了,期间,解决了一个又来一个问题,好吧,问题总是会有的。 这里大致介绍这个裁剪功能技术点、主要难点,实现原理。 技术点 图片缩放、移动 裁剪区域...
  • 这段时间处理图片清晰度问题,这里统一做一个整理! 1.调用系统做图片切割 ...AppImageManager.... * 裁剪图片方法实现 * * @param uri */ public void startPhotoZoom(Uri uri) { Intent intent = new I
  • 其实这篇文章的标题也可以...开发过微信小程序的同学都知道,当后台返回来的图片大小不一样,或者用户上传的图片大小不一样,而我们需要统一进行展示的时候,可以利用image标签的mode属性对图片进行缩放裁剪。mod...
  • cocos2dx图片精灵裁剪圆角矩形方法

    千次阅读 2016-06-14 17:17:56
    在做项目中,需要对图片进行裁剪统一所有图片的边角,在网上查找方法结合自己的项目,书写了一个专门做裁剪的函数,供大家参考;
  • 这是一个photoshop小插件,它可以根据用户设置的宽度和高度,按照其比例自动最大化的在中间区域批量裁剪图片,并且能够按照原目录结构输出文件。 使用说明: 1、此程序可以大批量裁切指定目录里面的所有图片为您输入...
  • PHP图片裁剪与缩放

    2014-11-13 17:00:46
    图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,119
精华内容 4,447
关键字:

如何统一裁剪图片