为啥有的图片加水印后变大而有的不变

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥有的图片加水印后变大而有的不变相关的知识,希望对你有一定的参考价值。

700X700的图片添加水印后,原本是276K的变成272K,443K的竟然变成800K,使用的软件是ISEE,加的水印图片是同一张大小为120K左右的PSD格式。总结一下,300K左右的变化不大,350K左右的就可能翻倍。实在不理解。请求帮助解答。
我想问的意思是说,为什么加了同样的水印,有的图片文件变化大,有的图片文件变化小?

文件大小是软件自动计算的结果
文件大小不是按照数学公式计算的 不是说我原来图片500K 加个200K的就等于700K
图片上的一切内容都是以数据形式储存在电脑里 内容不一样 文件量也就不一样
你在电脑里看到的文件大小 有两个概念 一个是文件本身的大小 一个是占用磁盘空间的大小
占用磁盘空间的大小必定大于文件本身的大小
也就是你文件本身是200K的话 那么储存在磁盘上 必定大于200K

图像上的颜色多少 是否丰富 占用面积多少 都会影响文件的大小
一般来说 颜色数量越多 颜色越丰富 占用图像的面积越多 文件大小越大
=========
【有的图片文件变化大,有的图片文件变化小】是因为你水印添加的位置不一样啊 水印下面的颜色给覆盖的程度;面积也不一样啊 呵呵
而且这是软件自动计算的的结果 你水印添加的位置或者颜色 或者透明度稍许有点偏差 计算的结果也不一样 这个计算结果是无法控制的 还有可能你添加了水印 会出现比原来文件体积还小的结果

你只能控制让文件大小不要超过某个值 软件就会根据你的数值限制 删除部分数据(如果你限制的比较低的话 会严重影响图像质量
如果你一张图片200K 你要限制到150K 那么软件就会根据你的要求删除多余的图片信息以降低文件容量 删除的信息较少的话 眼睛一般看不出变化)
如果你图像500K 你要限制到150K 那么删除的信息就会很多 会严重影响图像质量)
参考技术A 楼上说的很对。 参考技术B 一楼正解!

php对图片加水印--将文字作为水印加到图片

方法代码:

/**
     * 图片加水印(适用于png/jpg/gif格式)
     *
     * @author flynetcn
     *
     * @param $srcImg  原图片
     * @param $waterWord 水印文字
     * @param $savepath 保存路径
     * @param $savename 保存名字
     * @param $positon  水印位置
     *          1:顶部居左,角度-30度;2:居中,角度30度;3:居中,角度-30度;4:底部居左,角度30度;
     * @param $size 字体大小
     * @param $alpha   透明度 -- 0:完全透明, 100:完全不透明
     *
     * @return 成功 -- 加水印后的新图片地址
     *   失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败
     *       -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
     */
    function water_mark($srcImg, $waterWord, $savepath=null, $savename=null, $positon=3, $size=74, $color=null,$alpha=50){
        //判断文件是否存在
        $srcImgInfo = @getimagesize($srcImg);
        if(!$srcImgInfo){
            return -1;
        }

        //建立图像对象
        $srcImgObj = image_create_from_ext($srcImg, $srcImgInfo[2]);
        if(!$srcImgObj){
            return -3; //原文件图像对象建立失败
        }

        //准备信息:保存路径,保存文件名
        $temp = pathinfo($srcImg);
        $name = $temp[‘basename‘];
        $path = $temp[‘dirname‘];
        $ext  = $temp[‘extension‘];
        $color = $color ? $color : imagecolorallocate($srcImgObj, 255,250,250);
        $savename = $savename ? $savename : $name;
        $savepath = $savepath ? $savepath : $path;
        $savefile = $savepath .‘/‘. $savename;

        //创建一个画布,并给其填充颜色,否则背景为黑色
        $imgW = 500;
        $imgH =  $srcImgInfo[1]/($srcImgInfo[0]/500);
        $imgObj = imagecreatetruecolor($imgW, $imgH);
        $trans = imagecolorallocate($imgObj, 255, 255, 255);
        imagefill($imgObj, 0, 0, $trans);
        //缩小图片到画布
        imagecopyresampled($imgObj, $srcImgObj, 0, 0, 0, 0, $imgW, $imgH, $srcImgInfo[0], $srcImgInfo[1]);

        //确定生成水印的位置
        switch($positon){
            //1顶部居左,角度-20度
            case 1: 
                $x=$y=20;$angle = -20;
                break;
            //2居中,角度-20度
            case 2: 
                $x = $imgW/7; $y = $imgH/3; $angle = -20;
                break;
            //3居中,角度20度
            case 3: 
                $x = $imgW/7; $y = $imgH/1.5; $angle = 20;
                break;
            //4底部居左,角度20度
            case 4: 
                $x = 20; $y = $imgH; $angle = 20;
                break;
             default: 
                $x = $imgW/7; $y = $imgH/2; $angle = 20;
                break;
        }

        //添加水印图片
        imagettftext($imgObj, $size, $angle, $x, $y, $color, ‘./fonts/STXINWEI.TTF‘, $waterWord);
        //输出图片
        switch ($srcImgInfo[2]) {
            case 1: 
                imagegif($imgObj, $savefile); 
                break;
            case 2: 
                imagejpeg($imgObj, $savefile); 
                break;
            case 3: 
                imagepng($imgObj, $savefile); 
                break;
            default: 
                return -5; //保存失败
        }
        //销毁图像资源
        imagedestroy($imgObj);
        imagedestroy($srcImgObj);
        return $savefile;

    }
    /*
    * 创建图像对象
    * @param $imgFile 图片路径
    * @param $imgExt  图片扩展名
    * @return $im 图像对象
    **/
    function image_create_from_ext($imgFile, $imgExt){
        $im = null;
        switch ($imgExt) {
            case 1: 
                $im=imagecreatefromgif($imgFile);
                break;
            case 2: 
                $im=imagecreatefromjpeg($imgFile);
                break;
            case 3: 
                $im=imagecreatefrompng($imgFile);
                break;
        }
        return $im;
    }

测试:

//调用方法测试
$res = water_mark(‘F:\test\test1.jpg‘, "金万维域名认证专用", null, ‘res.jpg‘, 3, 36);
var_dump($res);

 

以上是关于为啥有的图片加水印后变大而有的不变的主要内容,如果未能解决你的问题,请参考以下文章

手机用水印相机加水印后图片变大了,要怎么弄?

用ps cs5做好的水印,添加到图片上的时候为啥会这么大,请详细解答!

为啥图片经过美图秀秀修改以后就变大了? 我的图片上上水印之后就 超过1M了

后台设置给图片加水印后生成的图片会增大吗?求大神帮助

不会吧,不会吧,不会还有人不知道❤️Python给图片加水印❤️超级简单哦

不会吧,不会吧,不会还有人不知道❤️Python给图片加水印❤️超级简单哦