You question is a bit unclear, but in your script below, there is no newline ('\n') at the end of either ifile or ifile2. While it is somewhat difficult to determine exactly what newline you are attempting to eradicate, it appears your goal is to prevent a newline from being written to /tmp/latest.txt following redirecting $ifile2 to the file. (that is the only conceivable newline at issue) The only newline involved in that entire transaction is the newline put there by echo itself:
#!/bin/bash
folder=~/Public
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' $folder | while read file
do
    ifile=$(ls -Art ~/Public | tail -n 1)
    ifile2=$(echo $ifile | tr '\n' ' ')
    echo $ifile2 >> /tmp/latest.txt
    zbarimg $ifile2 | pluma
done
If you want no newline written to /tmp/latest.txt, then use echo -n or printf, e.g.:
#!/bin/bash
folder=~/Public
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' "$folder" | while read -r file
do
    ifile=$(ls -Art ~/Public | tail -n 1)
    echo -n "$ifile" >> /tmp/latest.txt  # or printf "%s" "$ifile"
    zbarimg "$ifile" | pluma
done
Note: you can prove there is no newline to yourself with:
echo "'$ifile'"
Note2: In bash, unless inside [[...]] you should always quote your variables. (if you don't remember [[...]], then just always quote your variables). Further, the use of ls (any sort order) to fill your variable ifile is susceptible to a number of subtle file name errors (newlines in filenames, etc.) See Bash Pitfalls (#1) for related reasons involved in trying to iterate over the return of ls. 
"when I manually run it outside of the script it opens it just fine
  but throws an error about being unable to open the file from with in
  it".
OK that makes more sense. One way to find the newest file in "$folder" without the pitfals inherent in parsing ls would be:
#!/bin/bash
folder=~/Public
cdate=$(date +"%Y-%m-%d-%H:%M")
inotifywait -m -q -e create -r --format '%:e %w%f' "$folder" | while read -r file
unset -v ifile
for fname in "$folder"/*; do
    [[ $fname -nt $ifile ]] && ifile="$fname"
done
zbarimg "$ifile" | pluma
Give that a try and let me know if that cures the issue.