[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 30# 77七

magick没找到下载地方

TOP

回复 30# 77七

https://imagemagick.org/archive/ ... portable-Q8-x64.zip这个程序太大 不方便使用,能不能用bat直接调用系统自带的画图工具进行处理

TOP

回复 25# wh123wh123


方法1、抛弃Win7改用Win10或Win11
方法2、使用BAT调用第三方命令行工具(例如ImageMagick)
单纯依靠BAT本身是不行的,不必浪费这个时间。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 30# 77七

感谢老师,成功能处理。是不是只安全处理 本bat文件与需要处理的图片在同一个目录下的所有图片,不得对其他路径的文件进行错误修改吧?

TOP

回复 30# 77七


    中间的那一行大红色字体能不能去除掉?

TOP

回复 35# wh123wh123

removeRedWatermark.ps1
  1. Add-Type -AssemblyName System.Drawing
  2. function removeRedWatermark-Image {
  3.     param([string]$imagePath)
  4.     $image = [System.Drawing.Bitmap]::FromFile($imagePath)
  5.     $rect = New-Object System.Drawing.Rectangle(0, 0, $image.Width, $image.Height)
  6.     $bitmapData = $image.LockBits($rect, [System.Drawing.Imaging.ImageLockMode]::ReadWrite, $image.PixelFormat)
  7.     $ptr = $bitmapData.Scan0
  8.     $bytes = $bitmapData.Stride * $image.Height
  9.     $rgbValues = New-Object byte[] $bytes
  10.     [System.Runtime.InteropServices.Marshal]::Copy($ptr, $rgbValues, 0, $bytes)
  11.     for ($i = 0; $i -lt $rgbValues.Length; $i += 3) {
  12.         $b = $rgbValues[$i]
  13.         $g = $rgbValues[$i + 1]
  14.         $r = $rgbValues[$i + 2]
  15.         if ($r -gt $g -and $r -gt $b) {
  16.             $total = $r + $g + $b
  17.             if ($total -gt 400) {
  18.                 $rgbValues[$i] = 255
  19.                 $rgbValues[$i + 1] = 255
  20.                 $rgbValues[$i + 2] = 255
  21.             } else {
  22.                 $rgbValues[$i] = 0
  23.                 $rgbValues[$i + 1] = 0
  24.                 $rgbValues[$i + 2] = 0
  25.             }
  26.         }
  27.     }
  28.     [System.Runtime.InteropServices.Marshal]::Copy($rgbValues, 0, $ptr, $bytes)
  29.     $image.UnlockBits($bitmapData)
  30.     $newPath = [System.IO.Path]::GetDirectoryName($imagePath) + "\processed_" + [System.IO.Path]::GetFileName($imagePath)
  31.     $image.Save($newPath)
  32.     $image.Dispose()
  33. }
  34. $(dir *.jpg).foreach{
  35.     Write-Host "processing: $($_.Name)"
  36.     removeRedWatermark-Image $_.FullName
  37. }
复制代码

TOP

回复 36# buyiyang

您用BAT行不行?我不会用这个代码

TOP

回复 34# wh123wh123


   支持子目录
  1. @echo off
  2. rem 下载 "https://imagemagick.org/archive/binaries/ImageMagick-7.1.1-31-portable-Q8-x64.zip"
  3. cd /d "%~dp0"
  4. set "_exiftool=D:\exiftool-12.83\exiftool(-k).exe"
  5. set "_magick=D:\magick.exe"
  6. "%_exiftool%" -q -overwrite_original -icc_profile= -r . *.jpg
  7. rem 0,0,1200,100 xyxy 左上角及右下角坐标
  8. for /r %%a in (*.jpg) do (
  9. "%_magick%" "%%a" -fill white -draw "rectangle 0,0,1200,100 rectangle 0,1660,1280,1800" "copy_%%~nxa"
  10. move "copy_%%~nxa" "%%a"
  11. )
  12. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 37# wh123wh123
win7不是带有powershell的吗

TOP

回复 35# wh123wh123


  
  1. @echo off
  2. cd /d "%~dp0"
  3. set "_magick=D:\magick.exe"
  4. for /r %%a in (*.jpg) do (
  5. "%_magick%" "%%a" -fuzz 50% -fill white -opaque "#f4908d" "copy_%%~nxa"
  6. move "copy_%%~nxa" "%%a"
  7. )
  8. pause
复制代码
由于今天免费ai限额了...只能写到这样...
bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2024-4-22 22:50 编辑


根据老帖的vbs代码改写一个bat+jscript版本,存为test.bat运行,100%取用系统内置资源,楼主试试吧...
运行结果是将当前目录及其子目录中的*.jpg裁剪(顶裁100,底裁150)完毕,对应的新文件名为*.new.jpg
代码17-18行对应的顶部/底部裁剪量可被修改


  1. @set @v=1 //&(dir /b/s/a-d *.jpg|cscript /e:jscript "%~f0") &exit/b
  2. ////
  3. files=WSH.stdin.readall().split('\r\n');
  4. for (; files.slice(-1)==''; files.pop());
  5. img=WSH.CreateObject('WIA.ImageFile');
  6. ip=WSH.CreateObject('WIA.ImageProcess');
  7. for (var n=0,l=files.length; n<l; ++n) {
  8. var np=files[n].lastIndexOf('.');
  9. var outF=files[n].slice(0,np)+'.new'+files[n].slice(np);
  10. cutImage(files[n], outF);
  11. }
  12. WSH.quit();
  13. //
  14. function cutImage (inF, outF) {
  15. img.loadfile(inF);
  16. ip.filters.add(ip.filterinfos('Crop').filterid);
  17. ip.filters(1).properties('Top')=100;
  18. ip.filters(1).properties('Bottom')=150;
  19. img=ip.apply(img); img.savefile(outF);
  20. }
复制代码

TOP

回复 40# 77七


    没反应和没效果,没有DOS窗口

TOP

回复 38# 77七


    中间的那一行大红色字体能不能去除掉?

TOP

回复 41# aloha20200628

代码为什么复制代码粘贴到记事本里变成一行了?如何让按原格式到记事本里?

TOP

回复 41# aloha20200628


    不行,没效果

TOP

返回列表