Hallo,
mache mir nach sehr langer Zeit mal wieder ein kleines Programm um MP3 Dateien ein wenig anschaulicher in den einzelnen Playern zu gestalten für selbst gemachte Playlisten.
Dabei tausche ich das Cover(front) mit den vom Programm erstellten Coverbild aus.
Dafür lese ich aus der MP3 die ID3 und ID3v2 aus, Artist, Title, Genre, Bitrate, Sample Rate, um diese dann auf das neue Cover zu schreiben.
Die Schriftbreite bekomme ich dabei von einer Funktion die BugFix mal geschrieben hatte "_GetTextMeasure".
Die Form ist dabei das Label einer Schaltplatte. Siehe Bild im Anhang
Wenn nun ein Interpret oder aber der Name des Songs zu lang ist muss ich diesen Splitten und untereinanderschreiben sollte das aber immer noch zu lang sein muss die Schrift kleiner werden.
Habe gerade keinerlei Idee wie ich das umsetzen könnte mit der Schrift-Längen/Größen Anpassung.
Hier mal ein kleiner Teil von dem Skript:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <ListboxConstants.au3>
#Include <GuiStatusBar.au3>
#Include <GuiListView.au3>
#Include <File.au3>
#Include <Sound.au3>
#Include "ID3_v3.4.au3"
;https://www.autoitscript.com/forum/topic/43950-id3-udf-id3v1-id3v2-mp3-tags/
#Include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
FileDelete(@ScriptDir & '/test.ini')
FileDelete(@ScriptDir & '/*.jpg')
FileDelete(@ScriptDir & "/Images/Neu/*.png")
Opt("GUIOnEventMode", 1)
_GDIPlus_Startup()
$APIC_PNGTOJPEG_Encoder = _GDIPlus_EncodersGetCLSID("JPG")
Dim $sAPIC_PictureTypes = "Other|32x32 pixels 'file icon'|Other file icon|Cover (front)|Cover (back)|Leaflet page|Media (e.g. lable side of CD)|"
$sAPIC_PictureTypes &= "Lead artist/lead performer/soloist|Artist/performer|Conductor|"
$sAPIC_PictureTypes &= "Lyricist/text writer|Recording Location|During recording|During performance|Movie/video screen capture|"
$sAPIC_PictureTypes &= "A bright coloured fish|Illustration|Band/artist logotype|Publisher/Studio logotype"
;$ID3v2_AddAPIC_button = GUICtrlCreateButton("+", 450, 301, 18, 18)
$ID3v2_RemoveAPIC_button = GUICtrlCreateButton("-", 468, 301, 18, 18)
$APIC_pic = -1
Dim $szDrive, $szDir, $szFName, $szExt, $Filename
Dim $sAPIC_PictureTypes = "Other|32x32 pixels 'file icon'|Other file icon|Cover (front)|Cover (back)|Leaflet page|Media (e.g. lable side of CD)|"
$sAPIC_PictureTypes &= "Lead artist/lead performer/soloist|Artist/performer|Conductor|"
$sAPIC_PictureTypes &= "Lyricist/text writer|Recording Location|During recording|During performance|Movie/video screen capture|"
$sAPIC_PictureTypes &= "A bright coloured fish|Illustration|Band/artist logotype|Publisher/Studio logotype"
Global $textbreite
_FileOpen_button_Pressed()
Func _FileOpen_button_Pressed()
$Filename = FileOpenDialog("Select MP3 File", "", "MP3 (*.mp3)", 1 + 4 )
Dim $TimeToReadTags = 0
If Not(@error) Then
Local $begin = TimerInit()
Local $TAGINFO = _ID3ReadTag($Filename)
Local $iTAGsFound = @extended
IniWrite(@ScriptDir & '/test.ini','Raw_data','TAGINFO',$TAGINFO)
IniWrite(@ScriptDir & '/test.ini','Raw_data','TagFrameString',$ID3v2_TagFrameString)
IniWrite(@ScriptDir & '/test.ini','Raw_data','APEv2_TagFrameString',$APEv2_TagFrameString)
IniWrite(@ScriptDir & '/test.ini','Raw_data','ID3v1Tag_GetVersion',_ID3v1Tag_GetVersion)
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Title")',_ID3GetTagField("Title"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Artist")',_ID3GetTagField("Artist"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Album")',_ID3GetTagField("Album"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Track")',_ID3GetTagField("Track"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Year")',_ID3GetTagField("Year"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Genre")',_ID3GetTagField("Genre"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Comment")',_ID3GetTagField("Comment"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3v2Tag_GetVersion()',_ID3v2Tag_GetVersion())
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TIT2")',_ID3GetTagField("TIT2"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TPE1")',_ID3GetTagField("TPE1"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TALB")',_ID3GetTagField("TALB"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TRCK")',_ID3GetTagField("TRCK"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TYER")',_ID3GetTagField("TYER"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TCON")',_ID3GetTagField("TCON"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TLEN")',_ID3GetTagField("TLEN"))
$AlbumArtFile = _ID3GetTagField("APIC")
Dim $NumAPIC = @extended
If FileExists($AlbumArtFile) Then
If StringInStr($AlbumArtFile,".png") Then
$APIC_GDIPlusImage = _GDIPlus_ImageLoadFromFile($AlbumArtFile)
$AlbumArtFile = StringReplace($AlbumArtFile,".png",".png")
_GDIPlus_ImageSaveToFileEx($APIC_GDIPlusImage,$AlbumArtFile, $APIC_PNGTOJPEG_Encoder)
_GDIPlus_ImageDispose($APIC_GDIPlusImage)
EndIf
Dim $PicTypeIndex = StringInStr($AlbumArtFile,chr(0))
Local $aAPIC_PictureTypes = StringSplit($sAPIC_PictureTypes,"|",2)
If $APIC_pic == -1 Then
FileSaveDialog('Save File',@DesktopDir, $AlbumArtFile)
EndIf
EndIf
_GDIPlus_Shutdown()
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("POPM")',_ID3GetTagField("POPM"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TSSE")',_ID3GetTagField("TSSE"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TPUB")',_ID3GetTagField("TPUB"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TCOM")',_ID3GetTagField("TCOM"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("UFID")',_ID3GetTagField("UFID"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TPE2")',_ID3GetTagField("TPE2"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("WCOM")',_ID3GetTagField("WCOM"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("WXXX")', _ID3GetTagField("WXXX"))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("WOAR")', _ID3GetTagField("WOAR"))
Local $LyricsFile = _ID3GetTagField("USLT")
IniWrite(@ScriptDir & '/test.ini','Raw_data',' $LyricsFile', FileRead($LyricsFile))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3v2Tag_GetZPAD()', _ID3v2Tag_GetZPAD())
IniWrite(@ScriptDir & '/test.ini','Raw_data','_ID3v2Tag_GetTagSize()', _ID3v2Tag_GetTagSize())
IniWrite(@ScriptDir & '/test.ini','Raw_data','_APEv2Tag_GetTagSize()', _APEv2Tag_GetTagSize())
IniWrite(@ScriptDir & '/test.ini','Raw_data','_APEv2Tag_GetVersion()', _APEv2Tag_GetVersion())
IniWrite(@ScriptDir & '/test.ini','Raw_data','_APEv2Tag_GetItemCount()', _APEv2Tag_GetItemCount())
Local $bMPEG = _MPEG_GetFrameHeader($Filename)
IniWrite(@ScriptDir & '/test.ini','Raw_data','_MPEG_GetFrameHeader', $bMPEG)
IniWrite(@ScriptDir & '/test.ini','Raw_data','_MPEG_GetLayer($bMPEG)', _MPEG_GetLayer($bMPEG))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_MPEG_GetBitRate($bMPEG)', _MPEG_GetBitRate($bMPEG))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_MPEG_GetSampleRate($bMPEG)', _MPEG_GetSampleRate($bMPEG))
IniWrite(@ScriptDir & '/test.ini','Raw_data','_MPEG_GetChannelMode($bMPEG)', _MPEG_GetChannelMode($bMPEG))
EndIf
kuenstler_1()
EndFunc;==>Ende
;############################################################# Speichern ##################### ########
Func _ID3v2_SaveTag_button_Pressed()
_ID3v2Tag_WriteToFile($Filename)
_ID3v1Tag_WriteToFile($Filename)
ende()
EndFunc
Global $Title
Global $geteilter_Titel
;############################################################# kuenstler_1 ##################### ########
Func kuenstler_1()
Global $iSize=14
Global $iStyle=0
Global $sFont='Castellar'
Global $Title = IniRead(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("TPE1")',_ID3GetTagField("TPE1"))
If $Title = '' Then
Local $Title = IniRead(@ScriptDir & '/test.ini','Raw_data','_ID3GetTagField("Artist")','')
EndIf
Local $sString = StringReplace($Title, " ", " ")
Local $iReplacements = @extended
If $iReplacements > 1 Then
$geteilter_Titel_1 = StringSplit($Title,' ',2)
Global $sText = $geteilter_Titel_1[1]
EndIf
Global $sText = $Title
_GetTextMeasure()
If $textbreite > 100 Then
Global $geteilter_Titel = StringSplit($Title,' ', 2)
_ArrayDisplay($geteilter_Titel)
_GDIPlus_Startup()
$File = @ScriptDir & "/Images/leer/0.png"
$himg = _GDIPlus_ImageLoadFromFile($File)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
$iX = _GDIPlus_ImageGetWidth($himg)
$iy = _GDIPlus_ImageGetHeight($himg)
$hBrush = _GDIPlus_BrushCreateSolid(); $Color)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Castellar")
$hFont = _GDIPlus_FontCreate($hFamily, 14, 0)
$tLayout = _GDIPlus_RectFCreate(140, 120, 470, 40)
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $geteilter_Titel[0], $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDrawStringEx($hGraphics, $geteilter_Titel[0], $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
_GDIPlus_ImageSaveToFile($himg, @ScriptDir & "\Images\Neu\1.png")
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($himg)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
kuenstler_2()
Else
_GDIPlus_Startup()
$File = @ScriptDir & "/Images/leer/0.png"
$himg = _GDIPlus_ImageLoadFromFile($File)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
$iX = _GDIPlus_ImageGetWidth($himg)
$iy = _GDIPlus_ImageGetHeight($himg)
$hBrush = _GDIPlus_BrushCreateSolid(); $Color)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Castellar")
$hFont = _GDIPlus_FontCreate($hFamily, 14, 0)
$tLayout = _GDIPlus_RectFCreate(140, 150, 470, 40)
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $Title, $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDrawStringEx($hGraphics, $Title, $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
_GDIPlus_ImageSaveToFile($himg, @ScriptDir & "\Images\Neu\1.png")
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($himg)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
ende()
EndIf
EndFunc;kuenstler_1
;############################################################## ENDE kuenstler_1 ##################################
Func kuenstler_2()
Local $sString = StringReplace($Title, " ", " ")
Local $iReplacements = @extended
;;Global $geteilter_Titel = StringSplit($Title,' ', 2)
_GDIPlus_Startup()
$File = @ScriptDir & "/Images/Neu/1.png"
$himg = _GDIPlus_ImageLoadFromFile($File)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
$iX = _GDIPlus_ImageGetWidth($himg)
$iy = _GDIPlus_ImageGetHeight($himg)
$hBrush = _GDIPlus_BrushCreateSolid(); $Color)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Castellar")
$hFont = _GDIPlus_FontCreate($hFamily, 14, 0)
$tLayout = _GDIPlus_RectFCreate(140, 170, 470, 40)
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $geteilter_Titel[1], $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDrawStringEx($hGraphics, $geteilter_Titel[1], $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
_GDIPlus_ImageSaveToFile($himg, @ScriptDir & "\Images\Neu\2.png")
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($himg)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
If $iReplacements > 1 and $textbreite > 100 Then
;;Global $geteilter_Titel = StringSplit($Title,' ', 2)
_GDIPlus_Startup()
$File = @ScriptDir & "/Images/Neu/2.png"
$himg = _GDIPlus_ImageLoadFromFile($File)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
$iX = _GDIPlus_ImageGetWidth($himg)
$iy = _GDIPlus_ImageGetHeight($himg)
$hBrush = _GDIPlus_BrushCreateSolid(); $Color)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Castellar")
$hFont = _GDIPlus_FontCreate($hFamily, 14, 0)
$tLayout = _GDIPlus_RectFCreate(140, 220, 470, 40)
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $geteilter_Titel[2], $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDrawStringEx($hGraphics, $geteilter_Titel[2], $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
_GDIPlus_ImageSaveToFile($himg, @ScriptDir & "\Images\Neu\3.png")
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($himg)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
EndIf
ende()
EndFunc;kuenstler_2
;############################################################## ENDE kuenstler_2( ##################################
; #FUNCTION# ====================================================================================================================
; Name...........: _GetTextMeasure
; Description ...: Ermittelt den Platz zur Darstellung eines Textes unter Angabe von Größe, Attributen und Font
; Syntax.........: _MeasureText($sText, $iSize, $iStyle, $sFont)
; Parameters ....: $sText Der auszumessende Text
; $iSize Die Größe des Fonts in pt
; $iStyle Kombination der Textattribute
; 0 - Normal weight or thickness of the typeface (Standard)
; 1 - Bold typeface
; 2 - Italic typeface
; 4 - Underline
; 8 - Strikethrough
; $sFont Name des verwendeten Fonts (Standard='Arial')
; Return values .: Array[Höhe, Breite]
; Author ........: BugFix ( AutoIt@bug-fix.info )
; ===============================================================================================================================
Func _GetTextMeasure()
_GDIPlus_Startup()
Local $hGUI = GUICreate("", 800, 400)
GUISetState(@SW_HIDE, $hGUI)
Local $hFormat = _GDIPlus_StringFormatCreate(0)
Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
Local $hFont = _GDIPlus_FontCreate($hFamily, $iSize, $iStyle, 3)
Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)
Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ShutDown()
GUIDelete($hGUI)
Local $aOut[2] = [$iHeight,$iWidth]
;_ArrayDisplay($aOut)
Global $textbreite = $aOut[1]
Return $aOut
EndFunc ;==>_GetTextMeasure
Func Ende()
FileDelete(@ScriptDir & '/test.ini')
Exit
EndFunc;==>Ende
While 1
Sleep(50)
WEnd
Alles anzeigen