From 9871e574d52b16a68f31906d8b102362b0dd6ec7 Mon Sep 17 00:00:00 2001 From: Simon Kellet Date: Wed, 22 Jan 2025 19:18:49 +0000 Subject: [PATCH] better glitching algorithm --- glitch.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/glitch.go b/glitch.go index 81b7f94..5d2f3c5 100644 --- a/glitch.go +++ b/glitch.go @@ -7,8 +7,16 @@ import ( "path/filepath" ) +func fillSliceWithASCII(slice []byte) { + const asciiMin = 16 + const asciiMax = 150 + + for i := range slice { + slice[i] = byte(rand.Int32N(asciiMax-asciiMin+1) + asciiMin) + } +} + func glitchImage(inputFile string, outputFile string, shitSize int64, iterations int64) error { - // Prepend the "output" directory to the output file outputFilePath := filepath.Join("output", outputFile) // Open the source file for reading @@ -31,6 +39,10 @@ func glitchImage(inputFile string, outputFile string, shitSize int64, iterations // Get the size of the destination file fileSize := fileInfo.Size() + if fileSize == 0 { + fmt.Println("Cannot glitch file with size of zero bytes!") + return fmt.Errorf("input file is zero bytes") + } // Generate a random offset within the file var i int64 @@ -43,6 +55,7 @@ func glitchImage(inputFile string, outputFile string, shitSize int64, iterations // Generate random data and write it in shit := make([]byte, shitSize) + fillSliceWithASCII(shit) _, err = destination.Write(shit) check(err, "failed to write shit data: %w") @@ -68,21 +81,28 @@ func copyImage(inputFile string, outputFile string) error { _, err = destination.ReadFrom(source) check(err, "failed to copy file contents: %w") + // no errors return nil } -func generateGlitchedSequence(inputFile string, fileExt string, totalImages int, shitSize int64, iterations int64, chanceToRandom int32) { +func generateGlitchedSequence(inputFile string, fileExt string, totalImages int, shitSize int64, iterations int64, chanceToRandom int32) error { for i := 1; i <= totalImages; i++ { outputFileName := fmt.Sprintf("img_glitched_%d.%s", i, fileExt) if rand.Int32N(100) < chanceToRandom { // Glitched image err := glitchImage(inputFile, outputFileName, shitSize, iterations) - check(err, "failed to glitch image: %w") + if err != nil { + return fmt.Errorf("Cannot glitch image") + } } else { // Normal image err := copyImage(inputFile, outputFileName) - check(err, "failed to copy normal image: %w") + if err != nil { + return fmt.Errorf("Cannot glitch image") + } } } + // no errors + return nil }