Compare commits

...

2 Commits

Author SHA1 Message Date
Simon Kellet
e0d4d2d989 error handling for zero bytes 2025-01-22 19:19:00 +00:00
Simon Kellet
9871e574d5 better glitching algorithm 2025-01-22 19:18:49 +00:00
2 changed files with 28 additions and 5 deletions

View File

@ -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
}

View File

@ -58,6 +58,9 @@ func main() {
makeOutputDir()
defer clearOutputDir()
generateGlitchedSequence(sourceFile, fileExt, numCopies, shitSize, iterations, int32(chanceToRandom))
err = generateGlitchedSequence(sourceFile, fileExt, numCopies, shitSize, iterations, int32(chanceToRandom))
if err != nil {
return
}
ffmpegGenerateMP4(fileExt)
}