aa2zz6

Remove black bars on 100+ images

4 posts in this topic

#1 ·  Posted (edited)

We recently had a football camp for kids and we have roughly 100+ images with a black bar above and below each image. Is there a way to crop out the top and bottom black bars as a batch process? I've been cropping each image with paint so far but I've been at this for a few days. I've searched google & google+autoit for cropping images but I didn't find anything that removes the bars. The images seem to have different heights.

IMG_2398.JPG

IMG_2360.JPG

Edited by aa2zz6

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Try this code whereas this loads only one image and crop it by seaching for 0xFF000000 (black) color. If the cropping is not fully proper because of still black borders then increate the $iTolerance value.

#include <GDIPlus.au3>
_GDIPlus_Startup()
Global $sFile = @ScriptDir & "\Images\IMG_2360.JPG"
Global $hImage = _GDIPlus_ImageLoadFromFile($sFile)
Global $sDLL = @ScriptDir & "\_GDIPlus_BitmapGetCropArea.dll"
If Not FileExists($sDLL) Then _CropDLL(True)
Global $hDLL = DllOpen($sDLL)
Global $tPos = DllStructCreate("int iPosX;int iPosY;int iPosW;int iPosH"), $iSeachColor = 0xFF000000, $iTolerance = 32
DllCall($hDLL, "bool", "_GDIPlus_BitmapGetCropArea", "ptr", $hImage, "struct*", $tPos, "uint", $iSeachColor, "ubyte", $iTolerance)
ConsoleWrite($tPos.iPosX & ", " & $tPos.iPosY & ", " & $tPos.iPosW & ", " &  $tPos.iPosH & @CRLF)
Global $hBitmap_Cropped = _GDIPlus_BitmapCloneArea($hImage, $tPos.iPosX, $tPos.iPosY, $tPos.iPosW, $tPos.iPosH, $GDIP_PXF32ARGB)
_GDIPlus_ImageSaveToFile($hBitmap_Cropped, StringTrimRight($sFile, 4) & "_cropped.jpg")
DllClose($hDLL)
_GDIPlus_ImageDispose($hBitmap_Cropped)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2016-12-01

Func _CropDLL($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $CropDLL
    $CropDLL &= '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'
    $CropDLL &= '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'
    $CropDLL &= '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'
    $CropDLL &= '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'
    $CropDLL &= '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'
    $CropDLL &= 'dfqD7IDpuvj+/+saVr4Y0AAQ/K2FwHQNagNZ/3QkEOL6/9Dr7l7CDAAAAACQGwEQrBsBEAxkABCsGwEQAAAAAAAAAAAAAAAAkBsBEBzgABAMZAAQGNAAEAAAAAAAAAAAVhsBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCABAFAgAQAAAAAAAAAAAAAAAAB8IAEAWCABAAAAAAAAAAAAAAAAAIkgAQBoIAEAAAAAAAAAAAAAAAAAAAAAAAAAAACUIAEAAAAAALggAQCoIAEAxiABAAAAAADWIAEAAAAAAGdkaXBsdXMuZGxsAEtFUk5FTDMyLkRMTABtc3ZjcnQuZGxsAAAAR2RpcEJpdG1hcExvY2tCaXRzAABHZXRQcm9jQWRkcmVzcwAATG9hZExpYnJhcnlBAABWaXJ0dWFsUHJvdGVjdAAAX2lvYgAAAAAAAAAA005eWQAAAAASIQEAAQAAAAEAAAABAAAACCEBAAwhAQAQIQEAEBUAADEhAQAAAF9HRElQbHVzX0JpdG1hcEdldENyb3BBcmVhLmRsbABfR0RJUGx1c19CaXRtYXBHZXRDcm9wQXJlYQAAEAEAGAAAAH05Wjt4O3w7gDuEO5A7rDsAEAEAGAAAAH05Wjt4O3w7gDuEO5A7rDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
    Local $bString = _WinAPI_Base64Decode($CropDLL)
    If @error Then Return SetError(1, 0, 0)
    $bString = Binary($bString)
    If $bSaveBinary Then
        Local Const $hFile = FileOpen($sSavePath & "\_GDIPlus_BitmapGetCropArea.dll", 18)
        If @error Then Return SetError(2, 0, $bString)
        FileWrite($hFile, $bString)
        FileClose($hFile)
    EndIf
    Return $bString
EndFunc   ;==>_CropDLL

Func _WinAPI_Base64Decode($sB64String)
    Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($bBuffer, 1)
EndFunc   ;==>_WinAPI_Base64Decode

 

What you have to do is to read all images to an array to crop these images. :D

I wrote the DLL using FreeBasic to speed up this process. ;)

Edited by UEZ
Added tolerance parameter
1 person likes this

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Another example.

#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <File.au3>
#include <Array.au3>

Local $aFiles = _FileListToArray(@ScriptDir, "IMG_*.jpg", 1) ; $iFlag = $FLTA_FILES (1) = Return files only
;_ArrayDisplay($aFiles)
For $i = 1 To UBound($aFiles)-1
    $FileOut = @ScriptDir & "\" & StringRegExpReplace($aFiles[$i], "([^\.]+).([^\.]+)", "${1}Modified.${2}")
    ;ConsoleWrite($FileOut & @CRLF)
    _TrimBlackTopBottom(@ScriptDir & "\" & $aFiles[$i], $FileOut)
Next


Func _TrimBlackTopBottom($sFileIn, $sFileOut)
    Local $hBitmap, $hClone, $hImage, $iX, $iY
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($sFileIn)

    ; ---------------- Get Black boundaries -------------------------------
    Local $iW = _GDIPlus_ImageGetWidth($hImage), $iH = _GDIPlus_ImageGetHeight($hImage) ;get width and height of the image
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsDrawImageRect($hContext, $hImage, 0, 0, $iW, $iH)

    Local $tBitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iW, $iH, BitOR($GDIP_ILMWRITE, $GDIP_ILMREAD), $GDIP_PXF32ARGB) ;locks a portion of a bitmap for reading and writing. More infor at http://msdn.microsoft.com/en-us/library/windows/desktop/ms536298(v=vs.85).aspx
    Local $iScan0 = DllStructGetData($tBitmapData, "Scan0") ;get scan0 (pixel data) from locked bitmap
    Local $tPixel = DllStructCreate("int[" & $iW * $iH & "];", $iScan0)
    Local $iPixel, $iRowOffset

    For $iY = 1 to $iH / 2
        $iRowOffset = $iY * $iW + 1
        $iPixel = DllStructGetData($tPixel, 1, $iRowOffset + $iW / 2) ;get pixel color
        ;If StringRegExp(Hex($iPixel), "FF0[0-4]0[0-4]0[0-4]") = 0 Then
        If StringRegExp(Hex($iPixel), "FF0[0-9A-F]0[0-9A-F]0[0-9A-F]") = 0 Then ; Get not so dark as above line.
            $iTop = $iY
            ExitLoop
        EndIf
    Next
    For $iY = $iH -1 To $iH / 2 step - 1
        $iRowOffset = $iY * $iW + 1
        $iPixel = DllStructGetData($tPixel, 1, $iRowOffset + $iW / 2) ;get pixel color
        ;ConsoleWrite(Hex($iPixel) & "  " & $iY & @CRLF)
        ;If StringRegExp(Hex($iPixel), "FF0[0-4]0[0-4]0[0-4]") = 0 Then
        If StringRegExp(Hex($iPixel), "FF0[0-9A-F]0[0-9A-F]0[0-9A-F]") = 0 Then
            $iBottom = $iY
            ExitLoop
        EndIf
    Next
    _GDIPlus_BitmapUnlockBits($hBitmap, $tBitmapData) ;unlocks a portion of a bitmap that was locked by _GDIPlus_BitmapLockBits
    ConsoleWrite($iTop & "  " & $iBottom & @CRLF)
    ; ---------------- End of Get Black boundaries -------------------------------

    ; Create 24 bit bitmap clone
    $iX = _GDIPlus_ImageGetWidth($hImage)
    $iY = _GDIPlus_ImageGetHeight($hImage)
    ;ConsoleWrite($iX & " x " & $iY & @CRLF)
    $hClone = _GDIPlus_BitmapCloneArea($hImage, 0, $iTop, $iX, $iBottom - $iTop, $GDIP_PXF24RGB)

    ; Save bitmap to file
    _GDIPlus_ImageSaveToFile($hClone, $sFileOut)
    ;sleep(500)
    ;ShellExecute("GDIP_Image.jpg")

    ; Clean up resources
    _GDIPlus_ImageDispose($hClone)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_GraphicsDispose($hContext)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()
EndFunc   ;==>_TrimBlackTopBottom

 

 

Edited by Malkey
Instead of searching for the black from centre to top and bottom where black in the centre will give a false reading of the black border. Change searching for "not black" from top and bottom towards centre of image.
1 person likes this

Share this post


Link to post
Share on other sites

#4 ·  Posted

Thanks! @UEZ

Thanks! @Malkey

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now