因此,我有一个小脚本,它打开一个图像:
$file = ([System.IO.FileInfo]$FilePath);
if ($file.Exists) {
$imgInMemory = [System.Drawing.Image]::FromFile($file.FullName);
[...irrelevant code to the question...]
$imgInMemory.Save($($file.FullName + '.tmp'), $codecInfo, $encoderParams);
Move-Item -Path $($file.FullName + '.tmp') -Destination $file.FullName -Force;
}因此,我使用Image.FromFile方法加载文件内容,并试图将其保存回相同的文件名。我试过:
在打开的文件句柄方面,我遗漏了什么,因为看起来即使是移动项上的-Force也只删除.tmp文件而不覆盖原始文件。所以,如果您正在做一些事情,比如向图像中添加引脚,是否可以将输出保存回原始文件?如果是,怎么做?
发布于 2022-09-27 00:07:15
您可以在不需要创建临时文件的情况下完成此过程,不清楚为什么您的代码会失败,尽管这应该有效:
在将新内容保存到输入文件之前,在输入文件的输入ReadWrite FileAccess.
SetFileLength to 0上打开要用FromStream method覆盖的文件。
Save(Stream, ImageCodecInfo, EncoderParameters)或Save(Stream, ImageFormat) overloads.
Dispose。H 217G 218using namespace System.IO
using namespace System.Drawing
using namespace System.Drawing.Imaging
Add-Type -AssemblyName System.Drawing
$inFile = [FileInfo] 'path\to\file1.ext'
$refFile = 'path\to\file2.ext'
if ($file.Exists) {
$inStream = $inFile.Open([FileMode]::Open, [FileAccess]::ReadWrite)
$inImg = [Image]::FromStream($inStream)
$refImg = [Image]::FromFile($refFile)
# irrelevant code here...
$inStream.SetLength(0)
$inImg.Save($inStream, $imageCodecInfo, $encoderParams)
$refImg, $inImg, $inStream | ForEach-Object Dispose
}https://stackoverflow.com/questions/73860711
复制相似问题