标题: [文件操作] 求exiftool程序的下载 [打印本页]
作者: wh123wh123 时间: 2024-4-20 18:05 标题: 求exiftool程序的下载
求exiftool.exe程序的下载
作者: hfxiang 时间: 2024-4-20 18:55
回复 1# wh123wh123
http://bcn.bathome.net/s/tool/index.html?key=exiftool
作者: wh123wh123 时间: 2024-4-20 20:33
回复 2# hfxiang
微信公众号下载的jpg文件,有一些在windows照片查看器中无法打开,其原因是内嵌了ICC文件。解决办法很简单,不需要改windows颜色配置的方法:
首先,去http://exiftool.org下载个免费的命令行程序exiftool.exe。
建一个批处理文件Remove-icc.bat,用记事本编辑输入:exiftool -icc_profile= *.jpg 。
将exiftool.exe和Remove-icc.bat都放在需要更改的微信图片目录下,运行Remove-icc.bat,目录里面原jpg内嵌的icc文件都会被去除,并生成一个新的同名jpg。原jpg会自动更名为jpg_original文件,没有内嵌icc的jpg完全不影响。
按类型排序,删掉所有jpg_original文件,搞定收工。
上面这个情况,按照上面的方法为什么无效?
作者: Batcher 时间: 2024-4-21 09:05
回复 3# wh123wh123
请选一个“微信公众号下载的jpg文件,在windows照片查看器中无法打开”这样的图片上传到网盘,以便大家测试。
作者: wh123wh123 时间: 2024-4-21 16:27
本帖最后由 wh123wh123 于 2024-4-21 16:30 编辑
回复 4# Batcher
把图片右键保存到电脑,然后点击图片看能不能直接打开显示?看是什么原因导致无法正常显示的,期待原因和最佳解决办法
作者: 77七 时间: 2024-4-21 18:23
回复 5# wh123wh123
- https://exiftool.org/exiftool-12.83.zip
复制代码
用这个
作者: Five66 时间: 2024-4-21 18:24
就是icc , 原本打不开的 , 填充icc信息就能打开了
请确保你确实是移除了icc (3楼那)
作者: buyiyang 时间: 2024-4-21 20:25
回复 3# wh123wh123
RemoveICCfromJPG.ps1- Add-Type -AssemblyName System.Drawing
- $cp = New-Object CodeDom.Compiler.CompilerParameters
- $cp.ReferencedAssemblies.Add([Reflection.Assembly]::GetAssembly([Drawing.Image]).Location) >$null
- $cp.CompilerOptions ='/unsafe'
- Add-Type -CompilerParameters $cp -TypeDefinition @"
- using System;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.IO;
-
- public class ImageProcessor
- {
- public static void RemoveICCProfile(string imagePath)
- {
- string tempPath = Path.GetTempFileName();
-
- using (Image image = Image.FromFile(imagePath))
- {
- if (image.PropertyItems.Length > 0)
- {
- foreach (PropertyItem propertyItem in image.PropertyItems)
- {
- if (propertyItem.Id == 0x8773)
- {
- image.RemovePropertyItem(propertyItem.Id);
- }
- }
- }
-
- image.Save(tempPath, ImageFormat.Jpeg);
- }
-
- File.Delete(imagePath);
- File.Move(tempPath, imagePath);
- }
- }
- "@
-
- dir *.jpg | ForEach-Object {
- [ImageProcessor]::RemoveICCProfile($_.FullName)
- }
复制代码
作者: terse 时间: 2024-4-21 21:27
回复 8# buyiyang
Add-Type -AssemblyName System.Drawing
这个POWERSHELL直接就可以了吧
作者: wh123wh123 时间: 2024-4-21 21:39
回复 6# 77七
@echo off
exiftool -icc_profile= *.jpg
pause
'exiftool' 不是内部或外部命令
或批处理文件。
请按任意键继续. . .
这是咋回事?
作者: 77七 时间: 2024-4-21 21:42
回复 10# wh123wh123
把exe文件复制出来或者写exe的完整路径
作者: wh123wh123 时间: 2024-4-21 21:44
回复 9# terse
用BAT或者VBS能不能解决?上面代码看不懂
作者: wh123wh123 时间: 2024-4-21 21:47
回复 11# 77七
哦,是需要修改文件名才行,.jpg_original这个文件是什么?可以删除吗?如何顺便让批处理删除掉?求个完整地批处理代码,期待老师
作者: buyiyang 时间: 2024-4-21 21:53
回复 9# terse
ISE才可以
作者: 77七 时间: 2024-4-21 21:55
回复 13# wh123wh123
- @echo off
- cd /d "%~dp0"
- set "_exiftool=D:\exiftool-12.83\exiftool(-k).exe"
- "%_exiftool%" -icc_profile= *.jpg
- del "*jpg_original"
- pause
复制代码
作者: wh123wh123 时间: 2024-4-21 22:03
回复 15# 77七
图片里的最上面的无用内容和最下面的二维码用批处理能不能删除掉?
作者: wh123wh123 时间: 2024-4-21 22:20
回复 8# buyiyang
图片里的最上面的无用内容和最下面的二维码用批处理能不能删除掉?
作者: buyiyang 时间: 2024-4-21 23:10
回复 17# wh123wh123
whiteCoverJPG.ps1- Add-Type -AssemblyName System.Drawing
- function Cover-Image {
- param(
- [string]$ImagePath,
- [int]$TopCover,
- [int]$BottomCover
- )
- $originalImage = [System.Drawing.Image]::FromFile($ImagePath)
- $originalHeight = $originalImage.Height
- $originalWidth = $originalImage.Width
- $graphics = [System.Drawing.Graphics]::FromImage($originalImage)
- $whiteBrush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::White)
- $graphics.FillRectangle($whiteBrush, 0, 0, $originalWidth, $TopCover)
- $graphics.FillRectangle($whiteBrush, 0, $originalHeight - $BottomCover, $originalWidth, $BottomCover)
-
- $coveredImagePath = [System.IO.Path]::ChangeExtension($ImagePath, "covered.jpg")
- $originalImage.Save($coveredImagePath, [System.Drawing.Imaging.ImageFormat]::Jpeg)
- }
-
- # 白色覆盖顶部100像素,底部150像素
- $topCover = 100
- $bottomCover = 150
-
- dir *.jpg | ForEach-Object {
- Cover-Image -ImagePath $_.FullName -TopCover $topCover -BottomCover $bottomCover
- }
复制代码
作者: wh123wh123 时间: 2024-4-21 23:39
回复 wh123wh123
whiteCoverJPG.ps1
buyiyang 发表于 2024-4-21 23:10
这个代码怎么使用?
作者: terse 时间: 2024-4-22 00:26
本帖最后由 terse 于 2024-4-22 01:56 编辑
修改一下 换回ForEach- <# :
- @echo off
- powershell -noprofile -NoLogo "iex (${%~f0} | out-string)"
- pause
- exit
- #>
- Add-Type -AssemblyName System.Drawing
- function Remove-ICCProfile($images) {
- $images.ForEach{
- $temp = [IO.Path]::GetTempFileName()
- $image = [Drawing.Image]::FromFile($_)
- try {
- $icc = $image.propertyItems.Id.Where{$_ -eq 0x8773}
- if($icc){
- $image.RemovePropertyItem(0x8773)
- $image.Save($temp, [Drawing.Imaging.ImageFormat]::Jpeg)
- $image.Dispose()
- [IO.File]::Delete($_)
- [IO.File]::Move($temp, $_)
- }
- }
- finally{ $image.Dispose() }
- }
- }
- $images = [IO.Directory]::EnumerateFiles($pwd.Path, '*.jpg')
- Remove-ICCProfile $images
复制代码
作者: Batcher 时间: 2024-4-22 07:30
回复 19# wh123wh123
参考:http://bbs.bathome.net/thread-31071-1-1.html
作者: wh123wh123 时间: 2024-4-22 11:16
回复 20# terse
PowerShell 代码使用不太方便,能不能用BAT解决?包括删除图片右下角的二维码和页眉上方的无用内容?
作者: terse 时间: 2024-4-22 13:12
回复 22# wh123wh123
bat没有你所需的处理图像方法,这个也是bat运行POWERSHELL代码,保存为BAT文件,运行请前先备份- <# :
- @echo off
- powershell -noprofile -NoLogo "iex (${%~f0} | out-string)"
- pause
- exit
- #>
- Add-Type -AssemblyName System.Drawing
- function Remove-ICCProfile() {
- param(
- [string[]]$Images,
- [int]$top,
- [int]$bot
- )
- $images.foreach{
- $temp = [IO.Path]::GetTempFileName()
- try {
- $image = [Drawing.Image]::FromFile($_)
- $icc = $image.PropertyItems | Where-Object { $_.Id -eq 0x8773 }
- if($icc){
- #$image.RemovePropertyItem(0x8773)
- $newWidth = $image.Width
- $newHeight = $image.Height - $top - $bot
- $target = New-Object Drawing.Bitmap($newWidth, $newHeight)
- $graphics = [Drawing.Graphics]::FromImage($target)
- $cropRect = [Drawing.Rectangle]::FromLTRB(0, 100, $image.Width, $image.Height - $bot)
- $graphics.DrawImage($image, 0, 0, $cropRect, [Drawing.GraphicsUnit]::Pixel)
- $graphics.Dispose()
- $target.Save($temp, [Drawing.Imaging.ImageFormat]::Jpeg)
- $target.Dispose()
- $image.Dispose()
- [IO.File]::Delete($_)
- [IO.File]::Move($temp, $_)
- }
- }
- catch {
- if ($image -ne $null) { $image.Dispose() }
- if ($target -ne $null) { $target.Dispose() }
- }
- }
- }
-
- $images = [IO.Directory]::EnumerateFiles($pwd.Path, '*.jpg')
- Remove-ICCProfile $images -top 100 -bot 150
复制代码
作者: wh123wh123 时间: 2024-4-22 13:32
回复 23# terse
POWERSHELL是什么?也是一个exe程序?需要下载放到同一个文件夹?还是?
作者: wh123wh123 时间: 2024-4-22 13:49
回复 21# Batcher
安装POWERSHELL电脑会变慢,有没有其他处理办法?比如VBS
作者: czjt1234 时间: 2024-4-22 13:50
回复 24# wh123wh123
win10 win11 自带 powershell.exe
作者: wh123wh123 时间: 2024-4-22 14:01
回复 26# czjt1234
WIN7,另外问问,用BAT能不能以图片处理的方法,
用BAT如何把图片里指定位置的不需要的图案区域填充变成白色?下面是我手动去除下面的二维码和最上面无用的广告,bat能不能代替手工自动处理?
选中图片-右键编辑-点选中【颜色1】-点击【颜色选取器】为白色使【颜色1】变为白色-点击【矩形】-点击【“填充”为“纯色”】-鼠标移动到需要变白的区域即可变成白色,最后保存即可。
作者: wh123wh123 时间: 2024-4-22 14:27
回复 15# 77七
用BAT能不能以图片处理的方法,
用BAT如何把图片里指定位置的不需要的图案区域填充变成白色?下面是我手动去除下面的二维码和最上面无用的广告,bat能不能代替手工自动处理?
选中图片-右键编辑-点选中【颜色1】-点击【颜色选取器】为白色使【颜色1】变为白色-点击【矩形】-点击【“填充”为“纯色”】-鼠标移动到需要变白的区域即可变成白色,最后保存即可。
作者: 77七 时间: 2024-4-22 14:36
回复 28# wh123wh123
bat只有调用ffmpeg等工具才好处理,命令还需要网上找,我试着找了几个,存在一些问题。
作者: 77七 时间: 2024-4-22 15:00
回复 28# wh123wh123
- @echo off
- rem 下载 "https://imagemagick.org/archive/binaries/ImageMagick-7.1.1-31-portable-Q8-x64.zip"
-
- cd /d "%~dp0"
- set "_exiftool=D:\exiftool-12.83\exiftool(-k).exe"
- set "_magick=D:\magick.exe"
- "%_exiftool%" -icc_profile= *.jpg
- del "*jpg_original"
-
- rem 0,0,1200,100 xyxy 左上角及右下角坐标
- for %%a in (*.jpg) do (
- "%_magick%" "%%a" -fill white -draw "rectangle 0,0,1200,100 rectangle 0,1660,1280,1800" "copy_%%a"
- move "copy_%%a" "%%a"
- )
- pause
复制代码
ai找了个代码,我自己胡乱修改,同时去除两个区域,需要使用magick,使用前先备份,不合适自行调整下坐标。
作者: wh123wh123 时间: 2024-4-22 15:33
回复 30# 77七
magick没找到下载地方
作者: wh123wh123 时间: 2024-4-22 15:35
回复 30# 77七
https://imagemagick.org/archive/ ... portable-Q8-x64.zip这个程序太大 不方便使用,能不能用bat直接调用系统自带的画图工具进行处理
作者: Batcher 时间: 2024-4-22 15:49
回复 25# wh123wh123
方法1、抛弃Win7改用Win10或Win11
方法2、使用BAT调用第三方命令行工具(例如ImageMagick)
单纯依靠BAT本身是不行的,不必浪费这个时间。
作者: wh123wh123 时间: 2024-4-22 16:57
回复 30# 77七
感谢老师,成功能处理。是不是只安全处理 本bat文件与需要处理的图片在同一个目录下的所有图片,不得对其他路径的文件进行错误修改吧?
作者: wh123wh123 时间: 2024-4-22 17:12
回复 30# 77七
中间的那一行大红色字体能不能去除掉?
作者: buyiyang 时间: 2024-4-22 18:30
回复 35# wh123wh123
removeRedWatermark.ps1- Add-Type -AssemblyName System.Drawing
-
- function removeRedWatermark-Image {
- param([string]$imagePath)
- $image = [System.Drawing.Bitmap]::FromFile($imagePath)
- $rect = New-Object System.Drawing.Rectangle(0, 0, $image.Width, $image.Height)
- $bitmapData = $image.LockBits($rect, [System.Drawing.Imaging.ImageLockMode]::ReadWrite, $image.PixelFormat)
- $ptr = $bitmapData.Scan0
- $bytes = $bitmapData.Stride * $image.Height
- $rgbValues = New-Object byte[] $bytes
- [System.Runtime.InteropServices.Marshal]::Copy($ptr, $rgbValues, 0, $bytes)
-
- for ($i = 0; $i -lt $rgbValues.Length; $i += 3) {
- $b = $rgbValues[$i]
- $g = $rgbValues[$i + 1]
- $r = $rgbValues[$i + 2]
-
- if ($r -gt $g -and $r -gt $b) {
- $total = $r + $g + $b
- if ($total -gt 400) {
- $rgbValues[$i] = 255
- $rgbValues[$i + 1] = 255
- $rgbValues[$i + 2] = 255
- } else {
- $rgbValues[$i] = 0
- $rgbValues[$i + 1] = 0
- $rgbValues[$i + 2] = 0
- }
- }
- }
- [System.Runtime.InteropServices.Marshal]::Copy($rgbValues, 0, $ptr, $bytes)
- $image.UnlockBits($bitmapData)
- $newPath = [System.IO.Path]::GetDirectoryName($imagePath) + "\processed_" + [System.IO.Path]::GetFileName($imagePath)
- $image.Save($newPath)
- $image.Dispose()
- }
-
- $(dir *.jpg).foreach{
- Write-Host "processing: $($_.Name)"
- removeRedWatermark-Image $_.FullName
- }
复制代码
作者: wh123wh123 时间: 2024-4-22 18:40
回复 36# buyiyang
您用BAT行不行?我不会用这个代码
作者: 77七 时间: 2024-4-22 21:40
回复 34# wh123wh123
支持子目录- @echo off
- rem 下载 "https://imagemagick.org/archive/binaries/ImageMagick-7.1.1-31-portable-Q8-x64.zip"
-
- cd /d "%~dp0"
- set "_exiftool=D:\exiftool-12.83\exiftool(-k).exe"
- set "_magick=D:\magick.exe"
- "%_exiftool%" -q -overwrite_original -icc_profile= -r . *.jpg
-
-
- rem 0,0,1200,100 xyxy 左上角及右下角坐标
- for /r %%a in (*.jpg) do (
- "%_magick%" "%%a" -fill white -draw "rectangle 0,0,1200,100 rectangle 0,1660,1280,1800" "copy_%%~nxa"
- move "copy_%%~nxa" "%%a"
- )
- pause
复制代码
作者: terse 时间: 2024-4-22 21:42
回复 37# wh123wh123
win7不是带有powershell的吗
作者: 77七 时间: 2024-4-22 21:47
回复 35# wh123wh123
- @echo off
- cd /d "%~dp0"
- set "_magick=D:\magick.exe"
- for /r %%a in (*.jpg) do (
- "%_magick%" "%%a" -fuzz 50% -fill white -opaque "#f4908d" "copy_%%~nxa"
- move "copy_%%~nxa" "%%a"
- )
- pause
复制代码
由于今天免费ai限额了...只能写到这样...
作者: aloha20200628 时间: 2024-4-22 22:38
本帖最后由 aloha20200628 于 2024-4-22 22:50 编辑
根据老帖的vbs代码改写一个bat+jscript版本,存为test.bat运行,100%取用系统内置资源,楼主试试吧...
运行结果是将当前目录及其子目录中的*.jpg裁剪(顶裁100,底裁150)完毕,对应的新文件名为*.new.jpg
代码17-18行对应的顶部/底部裁剪量可被修改
- @set @v=1 //&(dir /b/s/a-d *.jpg|cscript /e:jscript "%~f0") &exit/b
- ////
- files=WSH.stdin.readall().split('\r\n');
- for (; files.slice(-1)==''; files.pop());
- img=WSH.CreateObject('WIA.ImageFile');
- ip=WSH.CreateObject('WIA.ImageProcess');
- for (var n=0,l=files.length; n<l; ++n) {
- var np=files[n].lastIndexOf('.');
- var outF=files[n].slice(0,np)+'.new'+files[n].slice(np);
- cutImage(files[n], outF);
- }
- WSH.quit();
- //
- function cutImage (inF, outF) {
- img.loadfile(inF);
- ip.filters.add(ip.filterinfos('Crop').filterid);
- ip.filters(1).properties('Top')=100;
- ip.filters(1).properties('Bottom')=150;
- img=ip.apply(img); img.savefile(outF);
- }
复制代码
作者: wh123wh123 时间: 2024-4-23 09:33
回复 40# 77七
没反应和没效果,没有DOS窗口
作者: wh123wh123 时间: 2024-4-23 09:39
回复 38# 77七
中间的那一行大红色字体能不能去除掉?
作者: wh123wh123 时间: 2024-4-23 09:43
回复 41# aloha20200628
代码为什么复制代码粘贴到记事本里变成一行了?如何让按原格式到记事本里?
作者: wh123wh123 时间: 2024-4-23 09:59
回复 41# aloha20200628
不行,没效果
作者: Batcher 时间: 2024-4-23 10:44
回复 44# wh123wh123
你用哪种方式复制的代码?
1、直接点击右上角的COPY按钮
2、先用鼠标选中代码然后再Ctrl+C
作者: wh123wh123 时间: 2024-4-23 11:16
回复 46# Batcher
感谢领导注意到这个问题,我用这2种方法粘贴到记事本里都是一行显示了,不知道是不是和电脑有关,以前用其他电脑可以自动按原格式行正常的显示,更换了一个华硕小块主板就有各种小问题。
作者: 77七 时间: 2024-4-23 11:35
回复 42# wh123wh123
把 50% 改为 50%%
作者: ygqiang 时间: 2024-4-23 11:35
本帖最后由 ygqiang 于 2024-4-23 11:36 编辑
41楼,执行正常
作者: wh123wh123 时间: 2024-4-23 11:44
回复 48# 77七
修改后可以处理了,但是文字内容变得不清晰啦
作者: 77七 时间: 2024-4-23 11:52
回复 50# wh123wh123
50可自行调整下,我不会写magick命令,做不到powershell能达到的效果。
作者: wh123wh123 时间: 2024-4-23 12:02
回复 41# aloha20200628
这个代码复制到bat里,运行bat后没反应,如何正确执行?
作者: wh123wh123 时间: 2024-4-23 12:07
回复 51# 77七
哦,非常感谢老师的帮助,点赞。
作者: wh123wh123 时间: 2024-4-23 12:12
回复 9# terse
感谢老师指点,我对这种代码非常头疼,一点也看不懂,最关键的是放到bat里运行没效果,呵呵,不知道如何用bat正确使用这段代码?
作者: aloha20200628 时间: 2024-4-23 13:47
本帖最后由 aloha20200628 于 2024-4-23 16:15 编辑
用以下bat+jscript代码成功删除了5楼右键存成的问题图片中的exif属性,即可直接用windows图片查看器打开浏览,其后用41楼代码剪裁就一气呵成了...
以下代码存为test.bat用法》
test.bat "问题图片.jpg"
生成新文件名为 "问题图片.new.jpg"
- @set @v=1 //&(if "%~1" neq "" cscript /e:jscript "%~f0" "%~1") &exit/b
- ////
- v=WSH.arguments;
- np=v(0).lastIndexOf('.'); outF=v(0).slice(0,np)+'.new'+v(0).slice(np);
- img=WSH.CreateObject('WIA.ImageFile');
- ip=WSH.CreateObject('WIA.ImageProcess');
- img.loadfile(v(0));
- ip.filters.add(ip.filterinfos('Exif').filterid);
- ip.filters(1).properties('ID')=34675;
- ip.filters(1).properties('Remove')=true;
- img=ip.apply(img); img.savefile(outF);
- WSH.quit();
复制代码
作者: terse 时间: 2024-4-23 14:24
回复 54# wh123wh123
你系统带有POWERSHELL吗?不会是精简系统吧,在cmd你执行 powershell set-executionpolicy Unrestricted 试一下
作者: aloha20200628 时间: 2024-4-23 15:03
本帖最后由 aloha20200628 于 2024-4-23 16:22 编辑
回复 52# wh123wh123
55楼代码(已订正第1行)用于删除单个问题图片中的Exif属性使其“复活” 》
复制为test.bat文件后放到被处理的图片(问题图片.jpg)目录中,运行 test.bat "问题图片.jpg" 之后应可看到对应的 "问题图片.new.jpg" 新文件被生成;
41楼代码用于批量剪裁图片顶边和底边 》
复制为test.bat文件后放到被处理的图片(*.jpg)目录中,运行 test.bat 之后应可看到对应的 *.new.jpg 新文件被生成。
作者: wh123wh123 时间: 2024-4-23 18:16
回复 56# terse
运行后没啥提示
作者: wh123wh123 时间: 2024-4-23 18:17
回复 55# aloha20200628
可以无损删除中间那个红色大字广告吗?
作者: wh123wh123 时间: 2024-4-23 18:21
回复 41# aloha20200628
运行了这个代码后,发现打开Word后显示区域变很小了,是不是和这个代码有关系呢?如何修改回原始默认那种?
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |