批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文件操作] [已解决]批处理如何实现在不破坏原图片文件的情况下改变图片的大小和哈希(hash)值?

本帖最后由 crownking1983 于 2016-5-23 15:43 编辑

求一个可以给一堆相同图片随机不同位置批量加2像素*2像素的黑点的BAT命令。
有点抽象,详细说明一下,比如有几百张一模一样的图片(其实也就是同一张图复制了几百个),像素均是800*600.
由于特殊工作需要将这些图片的CRC哈希校验值改变,使这几百张图片的大小和哈希校验值大部分不同,最简单的方法就是在每一个图片随机位置上点上一个2像素*2像素的黑点,这样就可以实现了。
但是几百张图 一张一张用画图软件去点是很类的,问下有没有bat批处理命令可以做到,双击后,所有图片每个图都在不同的随机位置上加一个2像素*2像素的黑点。
PS  1像素*1像素也行 就是小了点  3像素*3像素也行 就是大了点

特别注意,这相同的几百个图,如果某两张黑点点的是同一个位置的话,那么这两张图的大小和哈希值就会完全相同了。
我也不强求黑点的随机位置一个不重复,只要90%不重复就可以了。特殊工作需要,由于这张图是宣传页,这样批处理的目的,是为了避免有人通过大小或者CRC校验值批量搜索导致所有的宣传页被批量搜素出来。
2

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
    • pcl_test: 未按版规发帖PB -6

imagemagick,然而只是改变图片哈希值并不需要这么麻烦

TOP

回复 2# pcl_test


    呀呀呀!只要能改变文件的大小和哈希值就可以了。只改变哈希值也不行,因为如果大小全都一样的话,依然可以通过固定字节数批量搜到这些文件

TOP

回复 2# pcl_test


    另外我要说的是 我今天问的两个奇葩问题,是我整个工作中的最后俩问题了。只要解决了这最后两个问题,以后再也不会有这种奇葩问题了,感激版主多次鼎力相助

TOP

举例:
  1. @echo off & setlocal enabledelayedexpansion
  2. set s=00000000000
  3. for /l %%i in (1 1 10) do (
  4.     set n=!s:~%%i!
  5.     echo;!n!>~tmp.$
  6.     copy /b a.jpg + ~tmp.$ %%i.jpg
  7. )
复制代码
1

评分人数

TOP

回复 5# WHY


    大神,这个我使用了,但是运行后黑一下就没反应了,文件夹里多了一个~tmp.$的文件,所有图片也没有任何变化

TOP

回复 6# crownking1983


    举例的意思是:把一个图片文件 a.jpg 与批处理放在同一目录,运行批处理后会生成10个文件(1.jpg~10.jpg),其大小与hash值均不相同

TOP

回复 7# WHY


    理解了 很好用!!谢谢

TOP

本帖最后由 ivor 于 2016-5-22 15:49 编辑

回复 1# crownking1983
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. REM change current directory .jpg's hash and size
  3. for /f "delims=" %%b in ('dir /s /b *.jpg') do (
  4. set data=!data!1
  5. echo !data!>>%%b
  6. )
复制代码
1

评分人数

回答者如果帮到了您,奖励一个小小的红包吧^_^

TOP

回复 9# ivor


    大神,你这个真是完美!!!

TOP

回复 9# ivor


    大神,您这个批处理是按依次+1字节的规律处理的。那么如果引申一步,我要实现随机批处理加 1字节-1000字节 任意一个数的话,这个批处理命令该如何修改

TOP

本帖最后由 ivor 于 2016-5-23 13:18 编辑

回复 11# crownking1983
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. REM change current directory .jpg's hash and size
  3. for /f "delims=" %%b in ('dir /s /b *.jpg') do (
  4. call :addbyte
  5. echo !data!>>"%%b"
  6. echo %%b  增加  !rand!  字节
  7. )
  8. pause & goto :EOF
  9. :addbyte
  10. set /a rand=!random!%%1000
  11. set data=
  12. for /l %%a in (1,1,!rand!) do (
  13. set data=!data!1
  14. )
复制代码
1

评分人数

回答者如果帮到了您,奖励一个小小的红包吧^_^

TOP

回复 12# ivor


    果然是高人哪!今天技术+1发完了 明天再给你+1哈 昨天还有一个帖子你也答复我了很完美,后天那个帖子再给你+1

TOP

版主,我也有这方面的需求,但是对于这个答案,还不是很明白!

TOP

版主你好,很高兴看到你帮助大家的贴子,
我对这个问题也有需求,但是还是没搞明白。希望版主有空教教我,谢谢版主大大。我一直在线等你。谢谢

TOP

返回列表