2011-07-28 19 views
5

में कनवर्ट करें मुझे फ़ोल्डर और उपफोल्डर में सभी छवियों को jpg में कनवर्ट करने की आवश्यकता है। मुझे कमांड फ़ाइल के साथ इस प्रक्रिया को बैच करने की आवश्यकता है। मेरे लिए जीयूआई उपकरण सुई मुझे स्क्रिप्ट चाहिए।सभी छवियों को jpg

मैंने ImageMagick से mogrify.exe का उपयोग करने का प्रयास किया है, वहाँ कनवर्ट.एक्सई फ़ंक्शन भी है, लेकिन afaik दोनों छवियों को कनवर्ट करने में सक्षम हैं।

मैं अगले पटकथा लिखी:

$rootdir = "E:\Apps\скрипты\temp1\graphics" 
$files = dir -r -i *.png $rootdir 
foreach ($file in $files) {.\mogrify.exe -format png *jpg $file} 

लेकिन यह काम नहीं कर रहा है, जब मैं इसे चलाने के लिए प्रयास करते हैं, मुझे मिल गया त्रुटियों:

:

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. 

इसके अलावा, मैं अगले कोड की खोज की है

[Reflection.Assembly]::LoadWithPartialName('System.Drawing') 

$img=[Drawing.Image]::FromFile("$(cd)\Max.jpg") 
$img.Save("$(cd)\max.gif", 'Gif') 
$img.Dispose() 

मैं इसे डीआईआर के पेड़ के साथ कैसे काम कर सकता हूं और पीएनजी और टिफ को जेपीजी में परिवर्तित कर सकता हूं?

उत्तर

13

मैं यहाँ फ़ाइलें आइकन के लिए एक बिटमैप फ़ाइलों को परिवर्तित करने के साथ इसी तरह कुछ किया है:

http://sev17.com/2011/07/creating-icons-files/

मैं अपनी आवश्यकताओं के यह अनुकूलित और 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 
+0

उत्तर के लिए धन्यवाद! – Suliman

+0

कोई समस्या नहीं है। कृपया उत्तर के रूप में प्रश्न चिह्नित करना याद रखें। –

+0

अच्छा लग रहा है; हालांकि मैं मैन्युअल स्ट्रिंग स्वरूपण के बजाय '[IO.Path] :: ChangeExtension ($ _। FullName, '.jpg') का उपयोग करूंगा। –

0

मैंने Chad Miller's answer को इस ब्लॉग पोस्ट से जेपीईजी के गुणवत्ता स्तर को सेट करने की क्षमता को शामिल करने के लिए अनुकूलित किया:
Benoît Patra's blog: Resize image and preserve ratio with Powershell

# Try uncommenting the following line if you receive errors about a missing assembly 
# [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
function ConvertTo-Jpg 
{ 
    [cmdletbinding()] 
    param([Parameter(Mandatory=$true, ValueFromPipeline = $true)] $Path) 

    process{ 
    $qualityEncoder = [System.Drawing.Imaging.Encoder]::Quality 
    $encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1) 

    # Set JPEG quality level here: 0 - 100 (inclusive bounds) 
    $encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($qualityEncoder, 100) 
    $jpegCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | where {$_.MimeType -eq 'image/jpeg'} 

    if ($Path -is [string]) { 
     $Path = get-childitem $Path 
    } 

    $Path | foreach { 
     $image = [System.Drawing.Image]::FromFile($($_.FullName)) 
     $filePath = "{0}\{1}.jpg" -f $($_.DirectoryName), $($_.BaseName) 
     $image.Save($filePath, $jpegCodecInfo, $encoderParams) 
     $image.Dispose() 
    } 
    } 
} 

#Use function: 
# cd to directory with png files 
cd .\bin\pngTest 


#Run ConvertTo-Jpg function 
Get-ChildItem *.png | ConvertTo-Jpg 
+0

अल्फा चैनल के साथ एक पीएनजी से उलटा रंग प्राप्त करना। किसी भी विचार को ठीक करने के लिए कैसे? –

+0

@RossPresser मुझे अपने आप से नहीं पता, लेकिन एक त्वरित खोज ने इस [उत्तर] (http://stackoverflow.com/q/6513633/603003) का नेतृत्व किया। ध्यान दें कि System.Drawing.Image शुद्ध .NET API है, इसलिए .NET का उपयोग करने वाले किसी भी उत्तर (सी # या पीएस में हो) को "अनुवादित" किया जा सकता है। – ComFreek

+0

दिलचस्प। मैं बस 42 छवियों को दूसरी मशीन पर कॉपी कर रहा था जहां मैं छविमैजिक का उपयोग कर सकता था। लेकिन मैं किसी दिन के लिए ध्यान में रखूंगा। –

संबंधित मुद्दे