I need to convert all images in folder and subfolders to jpg. I need to batch this process with command file. GUI tools needles for me I need the script.
I tried to use mogrify.exe from ImageMagick, there is also convert.exe function, but afaik both of them are able to convert images.
I wrote next script:
$rootdir = "E:\Apps\скрипты\temp1\graphics"
$files = dir -r -i *.png $rootdir
foreach ($file in $files) {.\mogrify.exe -format png *jpg $file}
But it is not work, when I try to run it, I got errors:
mogrify.exe: unable to open file `*jpg' @ error/png.c/ReadPNGImage/3633.
mogrify.exe: Improper image header `E:\Apps\скрипты\temp1\graphics\telluric\day\
Athens\2011-07-03-17.png' @ error/png.c/ReadPNGImage/3641.
mogrify.exe: unable to open image `*jpg': Invalid argument @ error/blob.c/OpenBl
ob/2588.
Also I have find next code:
[Reflection.Assembly]::LoadWithPartialName('System.Drawing')
$img=[Drawing.Image]::FromFile("$(cd)\Max.jpg")
$img.Save("$(cd)\max.gif", 'Gif')
$img.Dispose()
How I can get it work with tree of dirs and convert png and tiff to jpg?
I've done something similar with converting a bitmap files to icon files here:
http://sev17.com/2011/07/creating-icons-files/
I adapted it to your requirements and test a function for converting image files to jpg:
function ConvertTo-Jpg
{
[cmdletbinding()]
param([Parameter(Mandatory=$true, ValueFromPipeline = $true)] $Path)
process{
if ($Path -is [string])
{ $Path = get-childitem $Path }
$Path | foreach {
$image = [System.Drawing.Image]::FromFile($($_.FullName));
$FilePath = [IO.Path]::ChangeExtension($_.FullName, '.jpg');
$image.Save($FilePath, [System.Drawing.Imaging.ImageFormat]::Jpeg);
$image.Dispose();
}
}
}
#Use function:
#Cd to directory w/ png files
cd .\bin\pngTest
#Run ConvertTo-Jpg function
Get-ChildItem *.png | ConvertTo-Jpg
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With